0%

Java 线程基础、线程之间的共享和协作 (三)

Java 线程基础、线程之间的共享和协作 (三)

ThreadLocal辨析

与Synchonized的比较

ThreadLocalSynchonized都用于解决多线程并发訪问。

可是ThreadLocal与synchronized有本质的差别。synchronized是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。
ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。

avatar

avatar

avatar

avatar

avatar

1
2
3
4
5
6
7
8
9
10
11
12
13
public final static ThreadLocal<String> RESOURCE = new ThreadLocal<String>();

Thread threadA=new Thread(new Runnable(){
public void run(){
String result=RESOURCE.get();
}
});
Thread threadB=new Thread(new Runnable(){
public void run(){
String result=RESOURCE.get();
}
});

所从上面几张图的解析可以得知RESOURCE代表一个能够存放String类型的ThreadLocal对象。此时不论什么一个线程能够并发访问这个变量,对它进行写入、读取操作,都是线程安全的。