Java--ThreadLocal原理与使用
2021-05-30 16:48
162 查看
ThreadLocal保证线程安全:
ThreadLocal内部持有ThreadLocalMap对象,线程内部单独创建副本,来保证数据隔离,但是由于ThreadLocalMap中key为弱引用,GC自动回收,但是value如果为强引用,就没法回收,就会造成内存泄露(除非线程退出)
关于垃圾回收(自动回收堆中没引用的对象空间):https://www.jianshu.com/p/23f8249886c6
参考链接:https://www.geek-share.com/detail/2833113260.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) 56c { 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原理简述及其使用详解
- java ThreadLocal(应用场景及使用方式及原理)
- Java多线程编程10 -ThreadLocal使用场景及原理
- java多线程模式ThreadLocal原理简述及其使用详解
- java并发编程学习: ThreadLocal使用及原理
- java ThreadLocal(应用场景及使用方式及原理)
- java并发(2)ThreadLocal的使用及实现原理(使用)
- 聊聊ThreadLocal原理以及使用场景-JAVA 8源码
- Java(面试必备):面试中的 ThreadLocal 原理和使用场景
- Java并发学习之ThreadLocal使用及原理介绍
- java ThreadLocal(应用场景及使用方式及原理)
- java并发(3)ThreadLocal的使用及实现原理(实现原理)
- Java中ThreadLocal的设计与使用
- 在EasyDBO中使用Java注解配置映射的原理及使用
- Java NIO原理和使用
- JAVA ArrayList的实现原理 及ArrayList的使用
- java中使用线程实现Timer(定时器)原理和源码
- Java中ThreadLocal的设计与使用
- java中使用公钥加密私钥解密原理实现license控制
- Java枚举类型enum的使用原理