对ThreadLocal的一些理解
- 2019 年 10 月 3 日
- 筆記
ThreadLocal?????????????????????????????ThreadLocal??????
- ThreadLocal??????
- ThreadLocal????
- ThreadLocal?????
ThreadLocal???????
??ThreadLocal?????????????????????????????????ThreadLocal?ThreadLocal??????????
ThreadLocal?????2????
- ??????????????????????
- ???????????????????????????????
??????????????????????
??ThreadLocal????????????????????????????????????????????????
?????????????????????????ThreadLocal??set????????????????????get?????id????????????
????Spring???????ThreadLocal??Connection?????DAO??????Connection????????????????
hreadLocal??????????????????????????????????????????????????
???????????????????????????????
ThreadLocal?????????????????????????ThreadLocal????????????????
?????ThreadLocal???????????????????????ThreadLocal?????????
?????
??????????????????????????????????????????????????????????????????
???????????????
ThreadLocal????
ThreaLocal???????
public class ThreadLocalTest { private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>(); public static void main(String[] args) { new Thread(() -> { try { for (int i = 0; i < 100; i++) { threadLocal.set(i); System.out.println(Thread.currentThread().getName() + "====" + threadLocal.get()); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } } finally { threadLocal.remove(); } }, "threadLocal1").start(); new Thread(() -> { try { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + "====" + threadLocal.get()); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } } finally { threadLocal.remove(); } }, "threadLocal2").start(); } }
???????
????????????threadLocal1??set??threadLocal2????????
Thread?ThreadLocalMap?ThreadLocal????
Thread??????threadLocals ????ThreadLocal.ThreadLocalMap????????????????ThreadLocalMap ??????????ThreadLocal??????????????????
??ThreadLocal??????Object???????????Object?????????ThreadLocal
???
??????????????????????Entry?key??ThreadLocal???????? ????????ThreadLocalMap:
java??????? ???????????????? ?
?????????????????
????????????????JVM???????????????????????????????????????
?????ThreadLocalMap??Entry?key??ThreadLocal????ThreadLocal??????
ThreadLocal????????ThreadLocalMap????Entry??????null???Entry???????Entry?????Object?????????????ThreadLocalMap ????????????
ThreadLocal??????
????????????????????????????????
?????????????????ThreadLocal??set??????Object?????set?get???????????????????????ThreadLocal???????????ThreadLocalMap????Entry?????null???????????set?get?????
???????????????????????remove???????
???ThreadLocal???static???????????ThreadLocal?????????ThreadLocalMap????Entry????????????remove????????????????????
??????????
????
try { // ?????? } finally { threadLocal??.remove(); }
??
????????????????????????????????????????????????????????????????
??ThreadLocal????Netty??????????FastThreadLocal?xxxxx???????????????????FastThreadLocal?????ThreadLocal????