请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于线程不安全的SimpleDateFormat

@Slf4j
@ThreadSafe
public class DateFormatExample4 {
    public static int clientTotal = 5000;
    public static int threadTotal = 200;
    //线程封闭
    private static final ThreadLocal<SimpleDateFormat> simpleDateFormatThreadLocal = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return  new SimpleDateFormat("yyyyMMdd");
        }
    };
    public static  void main(String[] args) throws InterruptedException {
        ExecutorService executorService = Executors.newCachedThreadPool();
        final Semaphore semaphore = new Semaphore(threadTotal);
        final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
        for (int i = 0; i < clientTotal; i++) {
            executorService.execute(() -> {
                try {
                    semaphore.acquire();
                    update();
                    semaphore.release();
                } catch (InterruptedException e) {
                    e.getStackTrace();
                }
                countDownLatch.countDown();
            });
        }
        countDownLatch.await();
        executorService.shutdown();
    }
    public static void update(){
        try {
            simpleDateFormatThreadLocal.get().parse("20190107");
        } catch (ParseException e) {
            log.error("parse exception:{}",e);
        }

    }
}

老师您好,我用ThreadLocal修饰SimpleDateFormat这个,然后也不报错了。
但是请教了ThreadLocal的用法,发现他不是为了解决线程安全设计的。
那这里使用之后,这个不报错了,解决了线程安全的问题吗?

正在回答

1回答

你好,threadlocal我在课程里也有介绍,他由于做了线程间封闭,不同的线程间无法互相访问,因此可以保证线程安全。他虽然不是为了线程安全专门设计的,但是使用他解决一些线程安全问题特别有效。

0 回复 有任何疑惑可以回复我~
  • 提问者 旺仔奶牛糖 #1
    恩恩。谢谢老师!!!
    回复 有任何疑惑可以回复我~ 2019-01-08 09:11:36
  • 菜鸟精髓 回复 提问者 旺仔奶牛糖 #2
    threadlocal 一般用于web保存用户信息,不会这么用的
    回复 有任何疑惑可以回复我~ 2019-05-27 11:11:20
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号