同步控制工具
- ReentrantLock :重入锁。可重入、可中断、可限时、公平锁。
- Condition :
- Semaphore :信号量。一个线程可申请多个信号。
- ReadWriteLock :读写锁。读读的情况不阻塞。
- CountDownLatch :计时锁。当所有线程都完成时执行。初始化时count设一个数,wait的线程等到其他线程从countdown到0时候执行。常用于某些初始化的操作,初始化完成后主线程继续工作。
- CyclicBarrier :计数器,循环使用。初始化时parties设一个数,多个线程等待,知道等待其他线程凑够数后,再一起执行。
- LockSupport :提供线程阻塞原语。unpark\suspend。能响应中断,不抛出异常。中断响应的结果是,park()函数的返回,可以从Thread.interrupted()得到中断标志。
- ReentrantLock的实现 :CAS状态、等待队列、park()。
并发容器
- HashMap、List、Set :线程不安全。Collections.synchronizedMap(Map<K,V>) 将其封装为线程安全的,用于并发度不高的情况。
- ConcurrentHashMap
- BlockingQueue
- ConcurrentLinkedQueue
线程池
public ThreadPoolExecutor(int corePoolSize, //核心线程数 int maximumPoolSize, //最大线程数 long keepAliveTime, //存活时间 TimeUnit unit, //存活时间单位 BlockingQueue<Runnable> workQueue, //任务队列 ThreadFactory threadFactory, //线程工厂 RejectedExecutionHandler handler) //线程拒绝策略
Callable和Future
- 非常适合在处理很耗时的业务逻辑时进行使用,可以有效减少系统的响应时间,提高系统的吞吐量。
- 对Future模式的封装。
相关阅读
http://ifeve.com/concurrentlinkedqueue/
http://wsmajunfeng.iteye.com/blog/1629354
http://ifeve.com/java-copy-on-write/