多线程三大特性——可见性

JMM

JMM对共享内存的操作做出了如下两条规定:

  • 线程对共享内存的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写;
  • 不同线程无法直接访问其他线程工作内存中的变量,因此共享变量的值传递需要通过主内存完成。

可见性问题

在多线程应用程序中,线程对非易失性变量(non-volatile variables进行操作,出于性能原因,每个线程在处理变量时会将变量从主内存复制到CPU缓存中。如果您的计算机包含多个CPU,每个线程可能运行在不同的CPU上。这意味着,每个线程可以将变量复制到不同CPU的CPU缓存中。

多线程三大特性——可见性_第1张图片

假设两个或多个线程访问一个共享对象,该对象包含如下声明的计数器变量:

public class SharedObject {

    public int counter = 0;

} 
  

你可能感兴趣的:(Java,多线程与高并发,java,thread,线程安全)