CyclicBarrier
JUC中ReentrantLock, Semaphore, CountDownLatch, ReentrantReadWriteLock, FutureTask都是基于AQS构建。但是没有直接扩展AQS,而是都将它们的相应功能委托给私有的AQS子类Sync实现。
使用案例 class RWDictionary { private final Map<String, Data> m = new TreeMap<String, Data>(); private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); private final Lock r = rwl.readLock(); private final Lock w = rwl.writeLock(); public Data get(String key) { r.lock(); try { return m.get(key); } finally { r.unlock(); } } public String[] allKeys() { r.lock(); try { return m.keySet().toArray(); } finally { r.unlock(); } } public Data put(String key, Data value) { w.lock(); try { return m.put(key, value); } finally { w.unlock(); } } public void clear() { w.lock(); try { m.clear(); } finally { w.unlock(); } } }
Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange 方法交换数据,如果第一个线程先执行exchange 方法,它会一直等待第二个线程也执行exchange 方法,当两个线程都到达同步点时,这两个线程就可以交换数据。
迭代器的fail-fast机制
java.util.concurrent.Executor, java.util.concurrent.ExecutorService, java.util.concurrent.Executors 这三者均是 Java Executor 框架的一部分,使用Executor框架能够将任务的提交和任务的执行解耦,从单个线程的提交执行进化到通过线程池的形式进行管理。Java 1.5之后还提供了许多内置的线程池配置进一步简化线程池的创建和管理。
线程池类图
线程的状态
什么是注解
Runnable和Callable