package zhu.suo;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
* CountDownLatch同步工具类
* 当减为0时才执行下一步 否则阻塞
* */
public class CutDownLatchDemo {
public static void main(String [] args){
ExecutorService threadPool= Executors.newCachedThreadPool();
final CountDownLatch cdl1 = new CountDownLatch(1);
final CountDownLatch cdl2 = new CountDownLatch(3);
for(int i=1;i<4;i++)
{
Runnable runable = new Runnable() {
public void run() {
try {
Thread.sleep((long)Math.random()*1000);
System.out.println("线程:"+Thread.currentThread().getName()+"到达");
cdl1.await();//当cd1减为0 则执行下一步 否则阻塞
System.out.println("线程:"+Thread.currentThread().getName()+"接受命令");
Thread.sleep((long)Math.random()*1000);
cdl2.countDown();//减一
} catch (Exception e) {
e.printStackTrace();
}
}
};
threadPool.execute(runable);//新建一个runable线程就放入线程池执行
}
//主线程
try {
Thread.sleep(2000);
System.out.println("主线程发送命令");
cdl1.countDown();//减一
Thread.sleep((long)Math.random()*1000);
System.out.println("主线程等待");
cdl2.await();
System.out.println("主线程执行完毕");
} catch (InterruptedException e) {
e.printStackTrace();
}
threadPool.shutdown();
}
}
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
* CountDownLatch同步工具类
* 当减为0时才执行下一步 否则阻塞
* */
public class CutDownLatchDemo {
public static void main(String [] args){
ExecutorService threadPool= Executors.newCachedThreadPool();
final CountDownLatch cdl1 = new CountDownLatch(1);
final CountDownLatch cdl2 = new CountDownLatch(3);
for(int i=1;i<4;i++)
{
Runnable runable = new Runnable() {
public void run() {
try {
Thread.sleep((long)Math.random()*1000);
System.out.println("线程:"+Thread.currentThread().getName()+"到达");
cdl1.await();//当cd1减为0 则执行下一步 否则阻塞
System.out.println("线程:"+Thread.currentThread().getName()+"接受命令");
Thread.sleep((long)Math.random()*1000);
cdl2.countDown();//减一
} catch (Exception e) {
e.printStackTrace();
}
}
};
threadPool.execute(runable);//新建一个runable线程就放入线程池执行
}
//主线程
try {
Thread.sleep(2000);
System.out.println("主线程发送命令");
cdl1.countDown();//减一
Thread.sleep((long)Math.random()*1000);
System.out.println("主线程等待");
cdl2.await();
System.out.println("主线程执行完毕");
} catch (InterruptedException e) {
e.printStackTrace();
}
threadPool.shutdown();
}
}