CountDownLatch的使用
程序员文章站
2022-05-05 18:24:47
...
代码
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
//# $ 号打印50时,三个线程交替执行
public class TestCountDownLatch {
public static void main(String[] args) {
CountDownLatch cdl = new CountDownLatch(2);
CyclicBarrier cb = new CyclicBarrier(3);
Thread t1 = new Thread(){
public void run(){
for(int i = 1 ; i <= 100 ; i++){
System.out.println("### "+i);
if (i == 50) cdl.countDown();
try {
Thread.sleep(100);
if (i == 99) cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread(){
public void run(){
for(int i = 1 ; i <= 100 ; i++){
System.out.println("$$$ "+i);
if (i == 50) cdl.countDown(); //countDownLatch为0的时候,释放下面打印*号的线程 三个线程交替执行
try {
Thread.sleep(100);
if (i==99) cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
Thread t3 = new Thread(){
public void run(){
try {
cdl.await(); //先对打印*号的线程进行阻塞 阻塞线程
} catch (InterruptedException e1) {
e1.printStackTrace();
}
for(int i = 1 ; i <= 100 ; i++){
System.out.println("*** "+i);
try {
Thread.sleep(100);
if (i==99) cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
t1.start();
t2.start();
t3.start();
}
}
运行结果这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!