线程的通信与同步
常见两种线程通信模型
| 内存共享模型 | 消息传递模型 | |
|---|---|---|
| 通信 | 线程共享公共状态,通过读写内存的公共状态隐式通信 | 线程没有公共状态,需要通过发送消息显式通信 |
| 同步 | 必须显式指定某段代码在线程之间互斥 | 发送消息天然同步,发送消息必然在接收消息之前,隐式同步去 |
Java内存模型结构
java使用的是共享内存模型,而堆内存和方法区就是对应的共享内存
内存共享与可见性
既然堆内存是共享的,为什么会有可见性问题
这是因为现代计算机为了高效,往往会在高速缓存区中缓存共享变量,因为cpu访问缓存区比访问内存要快得多。
线程之间的共享变量存在主内存中,每个线程都有一个私有的本地内存,存储了该线程以读、写共享变量的副本。本地内存是Java内存模型的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器等。
Java线程之间的通信

