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

Python016

java一个线程cas写普通变量,另一个线程能读到么,第1张

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())}。

共享进程资源:

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

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

如果你说的死循环是无论什么情况都无法跳出的话,它并不会死循环。

但是CAS也是会有缺点的,当大量线程同时更新的时候,所有线程都在循环获取,但是最终只有一个可以成功,这样的话,资源是有点浪费,所以,LongAdder等等了解一下。

一个线程间共享的变量,首先在主存中会保留一份,然后每个线程的工作内存也会保留一份副本。这里说的预期值,就是线程保留的副本。当该线程从主存中获取该变量的值后,主存中该变量可能已经被其他线程刷新了,但是该线程工作内存中该变量却还是原来的值,这就是所谓的预期值了。当你要用CAS刷新该值的时候,如果发现线程工作内存和主存中不一致了,就会失败,如果一致,就可以更新成功。(如果还不明白,可以查询下JVM内存模型等方面的知识)