CountDownLatch实例二

版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/83348757
import java.util.concurrent.CountDownLatch;

public class CountDownlatchTest {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("开始" + "," + Thread.currentThread().getName());
        CountDownLatch countDownLatch = new CountDownLatch(5);
        for (int i = 0; i < 5; i++) {
            new Thread(new readNum(i, countDownLatch)).start();
        }
        countDownLatch.await();//await的作用就是当前线程等待latch.countDown()直到减到0
        System.out.println("线程执行结束" + "," + Thread.currentThread().getName());
    }

    static class readNum implements Runnable {
        private int id;
        private CountDownLatch latch;

        public readNum(int id, CountDownLatch latch) {
            this.id = id;
            this.latch = latch;
        }

        @Override
        public void run() {
            synchronized (this) {
                System.out.println("id:" + id + "," + Thread.currentThread().getName());
                latch.countDown();
                System.out.println("线程组任务" + id + "," + Thread.currentThread().getName() + "结束,其他任务继续");
            }
        }
    }
}

输出:

开始,main
id:2,Thread-2
线程组任务2,Thread-2结束,其他任务继续
id:3,Thread-3
线程组任务3,Thread-3结束,其他任务继续
id:0,Thread-0
线程组任务0,Thread-0结束,其他任务继续
id:4,Thread-4
线程组任务4,Thread-4结束,其他任务继续
id:1,Thread-1
线程组任务1,Thread-1结束,其他任务继续
线程执行结束,main

CountDownLatch实例二

 CountDownLatch实例一

 CyclicBarrier实例二

CyclicBarrier实例一

CyclicBarrier和CountDownLatch区别

猜你喜欢

转载自blog.csdn.net/u010002184/article/details/83348757