常用的同步有synchronized关键字、Lock接口以及实现类,如ReentrantLock、ReentrantReadWriteLock中的ReadLock和WriteLock。
在本章中将以以下几个更高级的同步机制来实现多线程的同步。
- 信号量(Semaphore):
简要场景用途:允许同时n个线程访问某一个资源
- CountDownLatch:
简要场景用途: 有一个或则n个线程需要 依赖 某一个或则n个线程执行的结果,拿到结果后,再进行计算
- CyclicBarrier:
简要场景用途: 有一段代码需要等待一个或则n个线程到达一个指定点再执行,或则 有一个线程需要等待一个或则n个线程到底某一个点,这个线程才能被执行。
- Phaser:JAVA1.7新特性
简要场景用途:这个更强大,除了能实现2,3的功能外,没法一句话描述清楚
- Exchanger:
简要场景用途:用于两个线程消费者和生产者之间的数据交换。
在应用程序中,任何时候都可以使用Semaphore来保护临界区,而其他的辅助类则需要根据各自的特性来选择合适的使用场景。