并发学习笔记15-队列同步器
队列同步器AbstractQueuedSynchronizer(AQS)是用来构建锁或者其他同步组件的基础框架。该类也是其他许多同步类的基类,许多同步器通过AQS很容易构造出来(如,ReentrantLock、Semaphore、CountDownLatch、ReentrantReadWriteLock等,Java6以前的版本还包含SynchronousQueue和FutureTask)。
共 15 篇文章
队列同步器AbstractQueuedSynchronizer(AQS)是用来构建锁或者其他同步组件的基础框架。该类也是其他许多同步类的基类,许多同步器通过AQS很容易构造出来(如,ReentrantLock、Semaphore、CountDownLatch、ReentrantReadWriteLock等,Java6以前的版本还包含SynchronousQueue和FutureTask)。
Java SE5之前,在协调对共享对象的访问时可用的机制只有synchronized和volatile。Java 5.0之后,并发包中新增了Lock接口及其相关实现类。
Volatile可以修饰字段(成员变量),就是告知程序任何对该变量的访问均需从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。但是过多的使用volatile是不必要的,因为会降低程序执行的效率。

现代操作系统在运行一个程序时,会为其创建一个进程。

关于双重检测锁定,了解过单例的应该不陌生,但也容易写错。这里以单例模式为例一起探索。

JMM把happens-before要求禁止的重排序分为下面两类:
final域,编译器和处理器要遵守两个重排序规则:
锁可以让临界区互斥执行,还可以让释放锁的线程向获取同一个锁的线程发送消息。

对volatile变量的单个读/写,可看成是使用同一个锁对这些单个读/写操作做了同步。如示例:

顺序一致性内存模型是一个理论参考模型,在设计的时候,处理器的内存模型和编程语言的内存模型都会以顺序一致性内存模型作为参照。