基础同步工具类

Semaphore,CountDownLatch,CyclicBarrier均是jdk1.5提供的基础并发工具:

  • Semaphore是一个计数信号量,用于限制同时访问某个特定资源的数量
  • CountDownLatch是一个闭锁,允许一个或多个线程等待一组其他线程执行完成后执行,但只能使用一次
  • CyclicBarrier是一个循环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行,并且支持重复使用

本文内容默认读者已经理解AQS,若存在疑问,请先前往 AQS同步器 了解

ReentrantLock

  ReentrantLock是基于AQS同步器实现的互斥锁,它支持设置公平锁/非公平锁模式,同时具有可重入性。在这里讨论ReentrantLock对这些特性的支持及应用。

AQS同步器

  在 java.util.concurrent (JUC) 并发包中,如 ReentrantLock,Semaphore,CountDownLatch 等并发类的同步控制都是基于 AbstractQueuedSynchronizer (简称AQS) 这个同步器抽象类来实现的。在这里较为深入的讨论同步器抽象类的实现原理与应用。

内存屏障

  现代计算机大多数采用多核处理器或多处理器以提高性能,同时每个处理器通常存在一层或多层高速缓存,这将会更进一步加快对数据的访问。但是这也带来了新的挑战,即同一数据在不同处理器之间并不保证一致。所以为了保证数据的可见性,内存屏障应运而生。它能够刷新或使本地处理器高速缓存失效,以便查看其他处理器进行的写入的最新值或使该处理器的写入对其他处理器可见。而Java内存模型用于屏蔽不同硬件所带来的内存访问差异,以实现程序在不同平台能保证一致的并发效果。那么在并发环境下如何正确的使用内存屏障成为了首要问题。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×