线程数据共享与安全-ThreadLocal

1.ThreadLocal作用

在一个线程中,线程安全的共享数据(实现在同一个线程中共享数据,从而解决多线程数据安全的问题)

分析:1.数据:可以是普通变量,对象,数组等。(在一个线程中)一个数据对应一个ThreadLocal对象,线程销毁,对象释放。

          2.安全:如何理解-之后进行源码分析

2.ThreadLocal原理分析

2.1ThreadLocal方法(set,get)

先创建threadlocal对象

调用set方法:

threadLocal1.set(xxx);
xxx就是你要在这个线程中共享的数据

调用get方法:由于threadLocal1是static对象

直接 创建threadlocal对象所在类的类名.threadLocal1.get();

此处()里面什么都不填,why?后面分析源码

2.2ThreadLocal源码

set方法源码:

get方法源码:

2..3ThreadLocal的DeBug分析

执行set方法之后:table下多出10这个size

在10中寻找referent(对象)-此处作为empty的key值

                 value--------做出作为empty的value值

与创建threadlocal对象时候的debug出的对象对比:

二者匹配,说明threadlocal内部就是这样的原理来实现的,通过thread.currentThread()方法获取到当前线程,使用threadLocal对象与共享的数据一一对应,从而保证线程安全。

posted @ 2023-01-09 15:59  ZitWang  阅读(42)  评论(0编辑  收藏  举报