Java--ThreadLocal原理与使用
2021/5/30 20:54:14
本文主要是介绍Java--ThreadLocal原理与使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
ThreadLocal保证线程安全:
ThreadLocal内部持有ThreadLocalMap对象,线程内部单独创建副本,来保证数据隔离,但是由于ThreadLocalMap中key为弱引用,GC自动回收,但是value如果为强引用,就没法回收,就会造成内存泄露(除非线程退出)
关于垃圾回收(自动回收堆中没引用的对象空间):https://www.jianshu.com/p/23f8249886c6
参考链接:https://www.cnblogs.com/jalon/p/14819372.html
/* * 线程安全: * 1.synchronized修饰 * 2.ThreadLocal修饰--数据隔离 * * */ private ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>(){ @Override protected SimpleDateFormat initialValue() { // 这里会输出10次,分别是每个线程的id System.out.println(Thread.currentThread().getId()); return new SimpleDateFormat("yyyy-MM-dd"); } }; public void parse2(String dateString){ try { System.out.println(threadLocal.get().parse(dateString)); } catch (ParseException e) { e.printStackTrace(); } } private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); public void parse(String dateString){ try { synchronized (simpleDateFormat){ System.out.println(simpleDateFormat.parse(dateString)); } } catch (ParseException e) { e.printStackTrace(); } } @Test void testThreadLocal(){ ExecutorService service = Executors.newFixedThreadPool(10); for (int i = 0; i < 300; i++) { service.submit(() -> { // parse("2021-05-30"); parse2("2021-05-30"); }); } }
这篇关于Java--ThreadLocal原理与使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?