CountDownLatch原理-(主线程等待子线程结束再执行)

CountDownLatch是共享锁的一种实现,它默认构造 AQS 的 state 值为 count。当线程使用countDown方法时,其实使用了tryReleaseShared方法以CAS的操作来减少state,直至state为0就代表所有的线程都调用了countDown方法。当调用await方法的时候,如果state不为0,就代表仍然有线程没有调用countDown方法,那么就把已经调用过countDown的线程都放入阻塞队列Park,并自旋CAS判断state == 0,直至最后一个线程调用了countDown,使得state == 0,于是阻塞的线程便判断成功,全部往下执行。
CountDownLatch原理-(主线程等待子线程结束再执行)_第1张图片

用来进行线程同步协作,等待所有线程完成倒计时。
其中构造参数用来初始化等待计数值,await() 用来等待计数归零,countDown() 用来让计数减一

public static void main(String[] args) throws InterruptedException, ExecutionException {
		   CountDownLatch latch = new CountDownLatch(1);

	        Thread thread = new Thread(() -> {
	            try {
	                Thread.sleep(3000);
	                System.out.println("子线程先执行");
	            } catch (InterruptedException e) {
	                e.printStackTrace();
	            } finally {
	                latch.countDown();
	            }
	        });
	        thread.start();
	        latch.await();
	        System.out.println("主线程");
	}

你可能感兴趣的:(java,多线程)