包:java.util.concurrent。两个子包:locks,atomic。
线程池:
ExecutorService threadPool = Executors.newFixedThreadThreadPool(3);//创建固定大小的线程池
ExecutorService threadPool = Executors.newCachedThreadPool();//创建缓存线程池
ExecutorService threadPool = Executors.newSingleThreadExecutor();//创建单一线程,线程死了,自动创建一个线程
关闭线程池
shutdown与shutdownNow
用线程池启动定时器
Executors.newScheculedThreadPool(3).schedule(new Runnable(){},dealy,TimeUnit.SECONDS);
Callable与Future
Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现的。
Callable要采用ExecutorService的submit方法提交,返回的future对象可以取消任务。
CompletionServie<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool);
for(int i=0;i<10;i++){
final int task = i;
completionService.submit(new Callable<Integer>(){
public Integer call()throws Exception{
return task;
}
});
}
for(int i=0;i<10;i++){
System.out.println(completionService.take().get());
}
Condition:通信,类似wait和notify
condition.await();
condition.signal();
Semaphore信号灯:维护当前访问自身的线程个数
CyclicBarrier:表示大家彼此等待,大家集合好后才开始出发。
CountDownLatc:犹如倒计时计数器,当等于0时,所有等待开始执行。