CyclicBarrier使用:
假设一个场景:每个线程代表一个运动员,当运动员都准备好后才一起出发,只要有一个人没有准备好就一起等待。
CyclicBarrier cb = new CyclicBarrier(3);
ExecutorService pool = Executors.newFixedThreadPool(3);
pool.submit(new Thread(new Runnable() { run(){
cb.await();
}});
pool.submit(new Thread(new Runnable() { run(){
cb.await();
}});
pool.submit(new Thread(new Runnable() { run(){
cb.await();
}});
pool.shutdown(); //同时启动
如果线程数小于3会一直等待下去
CoutDwonLacth使用:
经常用于监听某些初始化操作,主线程可以通过await()方法直接进入阻塞状态,其他线程进行初始化,初始化完毕后通过countdown()唤醒主线程继续执行操作。
Callable和Future的结合使用:
其实就是jdk基于future模式的一个封装,当主线程需要数据又不立即需要使用时,主线程继续向下执行,future模式会悄悄另起线程去执行真正的任务,执行完毕后放进FutureStak类中,当主线程需要数据时就从该类中取出。体现的是异步加载的策略。