摘要:
yy 这篇文章我们来聊一聊Java多线程里面的“锁”。 首先需要明确的一点是:Java多线程的锁都是基于对象的,Java中的每一个对象都可以作为一个锁。 还有一点需要注意的是,我们常听到的类锁其实也是对象锁。 Java类只有一个Class对象(可以有多个实例对象,多个实例共享这个Class对象),而 阅读全文
摘要:
8.1 几个基本概念 在介绍volatile之前,我们先回顾及介绍几个基本的概念。 8.1.1 内存可见性 在Java内存模型那一章我们介绍了JMM有一个主内存,每个线程有自己私有的工作内存,工作内存中保存了一些变量在主内存的拷贝。 内存可见性,指的是线程之间的可见性,当一个线程修改了共享变量时,另 阅读全文
摘要:
7.1 什么是重排序? 指令重排序,就是指实际运行的代码顺序与程序中我们编写的代码顺序不一致,编译器/处理器做了优化,对指令重新排序。 为什么指令重排序可以提高性能? 简单地说,每一个指令都会包含多个步骤,每个步骤可能使用不同的硬件。因此,流水线技术产生了,它的原理是指令1还没有执行完,就可以开始执 阅读全文
摘要:
6.1 并发编程模型的两个关键问题 线程间如何通信?即:线程之间以何种机制来交换信息 线程间如何同步?即:线程以何种机制来控制不同线程间操作发生的相对顺序 有两种并发模型可以解决这两个问题: 消息传递并发模型 共享内存并发模型 这两种模型之间的区别如下表所示: 在Java中,使用的是共享内存并发模型 阅读全文