0""00D
4
%!,"23
4
"1"(","2!"2339
#6=2DA!"23,"7$23A拿到的数据A"39
:
:
0""00'
4
%!,"23
4
"1"(","2!"2339
#6=2'A!"23,"7$23A拿到的数据A"39
:
:
:
结果并没与实现线程间的数据同步,两个线程使用的是同一个线程的数据。要解决这
个问题,可以将每个线程用到的数据与对应的线程号存放到一个 $% 集合中,使用数据时
从这个集合中根据线程号获取对应线程的数据。代码实现:上面红色部分
程序中存在的问题:获取的数据与设置的数据不同步
共享数据设置为:
模块数据:
共享数据设置为:
模块数据:
模块数据:
模块数据:
最好将 中设置数据的方法也写在对应的模块中,与获取数据模
块互斥,以保证数据同步
06. ThreadLocal 类及应用技巧
多个模块在同一个线程中运行时要共享同一份数据,实现线程范围内的数据共享可以
用上一节中所用的方法。
(- 提供了 类来方便实现线程范围内的数据共享,它的作用就相当于
上一节中的 @%。
每个线程调用全局 对象的 0" 方法,就相当于往其内部的 $% 集合中增加
一条记录,<& 就是各自的线程,! 就是各自的 0" 方法传进去的值。
在线程结束时可以调用 23方法用来更快释放内存,也可以不调用,因
为线程结束后也可以自动释放相关的 变量。
一个 对象只能记录一个线程内部的一个共享变量,需要记录多个共享数据,
可以创建多个 对象,或者将这些数据进行封装,将封装后的数据对象存入
对象中。
将数据对象封装成单例,同时提供线程范围内的共享数据的设置和获取方法,提供已
经封装好了的线程范围内的对象实例,使用时只需获取实例对象即可实现数据的线程范围