File tree Expand file tree Collapse file tree 1 file changed +3
-5
lines changed
Expand file tree Collapse file tree 1 file changed +3
-5
lines changed Original file line number Diff line number Diff line change @@ -472,9 +472,7 @@ public class SynchronizedDemo2 {
472472
473473** 如果你创建了一个` ThreadLocal ` 变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是` ThreadLocal ` 变量名的由来。他们可以使用 ` get() ` 和 ` set() ` 方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。**
474474
475- 再举个简单的例子:
476-
477- 比如有两个人去宝屋收集宝物,这两个共用一个袋子的话肯定会产生争执,但是给他们两个人每个人分配一个袋子的话就不会出现这样的问题。如果把这两个人比作线程的话,那么 ThreadLocal 就是用来避免这两个线程竞争的。
475+ 再举个简单的例子:比如有两个人去宝屋收集宝物,这两个共用一个袋子的话肯定会产生争执,但是给他们两个人每个人分配一个袋子的话就不会出现这样的问题。如果把这两个人比作线程的话,那么 ThreadLocal 就是用来避免这两个线程竞争的。
478476
479477### 2.3.19. ThreadLocal 原理讲一下
480478
@@ -512,7 +510,7 @@ ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;
512510
513511通过上面这些内容,我们足以通过猜测得出结论:** 最终的变量是放在了当前线程的 ` ThreadLocalMap ` 中,并不是存在 ` ThreadLocal ` 上,` ThreadLocal ` 可以理解为只是` ThreadLocalMap ` 的封装,传递了变量值。** ` ThrealLocal ` 类中可以通过` Thread.currentThread() ` 获取到当前线程对象后,直接通过` getMap(Thread t) ` 可以访问到该线程的` ThreadLocalMap ` 对象。
514512
515- ** ` ThreadLocal ` 内部维护的是一个类似 ` Map ` 的 ` ThreadLocalMap ` 数据结构, ` key ` 为当前对象的 ` Thread ` 对象,值为 Object 对象 。**
513+ ** 每个 ` Thread ` 中都具备一个 ` ThreadLocalMap ` ,而 ` ThreadLocalMap ` 可以存储以 ` ThreadLocal ` 为 key , Object 对象为 value 的键值对 。**
516514
517515``` java
518516ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {
@@ -522,7 +520,7 @@ ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {
522520
523521比如我们在同一个线程中声明了两个 ` ThreadLocal ` 对象的话,会使用 ` Thread ` 内部都是使用仅有那个` ThreadLocalMap ` 存放数据的,` ThreadLocalMap ` 的 key 就是 ` ThreadLocal ` 对象,value 就是 ` ThreadLocal ` 对象调用` set ` 方法设置的值。
524522
525- ![ ThreadLocal数据结构] ( https://upload- images.jianshu.io/upload_images/7432604-ad2ff581127ba8cc.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/ 806 )
523+ ![ ThreadLocal数据结构] ( https://guide-blog- images.oss-cn-shenzhen.aliyuncs.com/2020/1/ 806.jpeg )
526524
527525` ThreadLocalMap ` 是` ThreadLocal ` 的静态内部类。
528526
You can’t perform that action at this time.
0 commit comments