欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();
	}
}

运行结果
CountDownLatch的使用
这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!

相关标签: 多线程