Java 线程基础、线程之间的共享和协作 (三)
ThreadLocal辨析
与Synchonized的比较
ThreadLocal和Synchonized都用于解决多线程并发訪问。
可是ThreadLocal与synchronized有本质的差别。synchronized是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。
ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。
1 | public final static ThreadLocal<String> RESOURCE = new ThreadLocal<String>(); |
所从上面几张图的解析可以得知RESOURCE代表一个能够存放String类型的ThreadLocal对象。此时不论什么一个线程能够并发访问这个变量,对它进行写入、读取操作,都是线程安全的。