JAVA线程本地变量ThreadLocal和私有变量的区别

Python016

JAVA线程本地变量ThreadLocal和私有变量的区别,第1张

ThreadLocal变量 作用域是各自线程内部。私有变量作用域 属于该类的实例。

所以, ThreadLocal变量 只用于线程内部共享,是线程安全的。

私有变量线程不安全,例如,利用一个Runnable实例启动2个线程,这2个线程就可以共同拥有 私有变量。

java一个线程cas写普通变量,另一个线程能读到。

java 线程锁 synchronizedthreadlocal变量和单个线程关联,简单来讲,类似于(具体可参考jdk源码):Java代码public class FakeThreadLocal<T>{private final Map<Thread, T>values = new HashMap<Thread, T>()public T get() {return values.get(Thread.currentThread())}。

共享进程资源:

在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间)。

这意味着,线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。