zoukankan      html  css  js  c++  java
  • 并发条件下SimpleDateFormat线程不安全及解决方案

    1、使用线程池创建并发环境解析日期

    package com.zh.time;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    /**
     * @desc SimpleDateFormat 线程不安全
     * @author zhanh247
     */
    public class SimpleDateFormatTest {
    
        public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            ExecutorService executorService = Executors.newFixedThreadPool(10);
            try {
                Callable<Date> callable = new Callable<Date>() {
                    @Override
                    public Date call() throws Exception {
                        return sdf.parse("20180909");
                    }
                };
                List<Future<Date>> list = new ArrayList<Future<Date>>();
    
                for (int i = 0; i < 10; i++) {
                    list.add(executorService.submit(callable));
                }
    
                for (Future<Date> future : list) {
                    System.out.println(future.get());
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            } finally {
                executorService.shutdown();
            }
        }
    
    }

    2、执行结果如下:

     3、线程不安全问题解决方案

    package com.zh.time;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * @desc 线程安全
     * @author zhanh247
     */
    public class SimpleDateFormatThreadLocal {
    
        private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
            protected DateFormat initialValue() {
                return new SimpleDateFormat("yyyyMMdd");
            };
        };
    
        public static Date convert(String source) throws ParseException {
            return df.get().parse(source);
        }
    }
  • 相关阅读:
    在iview admin中封装axios请求
    git使用
    css选择器
    vue打包空白及字体路径错误问题
    axios 等待同步请求用法及多请求并发
    在Vuex更新,组件内的视图更新问题
    vue中用ajax上传文件
    在vue中使用lang="scss"出现报错解决思路
    HBuilder打包vue项目app后空白,并请求不到数据
    接口里返回的数据不全问题
  • 原文地址:https://www.cnblogs.com/zhanh247/p/11870036.html
Copyright © 2011-2022 走看看