码迷,mamicode.com
首页 > 其他好文 > 详细

CountDownLatch CyclicBarrier Semaphore

时间:2021-01-29 12:18:25      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:class   ack   dex   执行   down   err   限流   线程   nbsp   

 

如下是简单的线程

for (int i = 0; i <10 ; i++) {
     new Thread(()->{
        System.out.println("1");
          },""+i).start();
      }
   System.out.println("2");

2在线程代码后 但不会在线程执行完后才跑

 

CountDownLatch(减计数器)
CountDownLatch countDownLatch = new CountDownLatch(8);//初始化计数器值
        for (int i = 0; i < 8; i++) {
            new Thread(()->{
                System.out.println("1");
                countDownLatch.countDown();//数量-1
            }).start();
        }
        countDownLatch.await();//等待 计数器归0后往下走
        System.out.println("2");

CountDownLatch减计数 计数器不为0休眠等待  归0后唤醒(也是一个线程)





CyclicBarrier(加计数器)
 CyclicBarrier cyclicBarrier = new CyclicBarrier(3,()->{
            System.out.println("数量达到3");
        });
        for (int i = 0; i < 3; i++) {
            int i1=i;
            new Thread(()->{
                System.out.println("第"+i1+"个");
                try {
                    cyclicBarrier.await();//等待并+1
                } catch (Exception e) {
                    e.printStackTrace();
                } 
            }).start();
        }

指定个数线程跑完后再执行

 

 

 

Semaphore(限流)(重点)
 Semaphore semaphore = new Semaphore(3);
        for (int i = 0; i < 9; i++) {
            new Thread(()->{
                try {
                    semaphore.acquire();//获取
                    System.out.println("只能进来指定个数线程");
                    TimeUnit.SECONDS.sleep(2);//等待2s
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    semaphore.release();//释放
                }
            }).start();
        }

同一时间只能跑指定数量的线程

 

CountDownLatch CyclicBarrier Semaphore

标签:class   ack   dex   执行   down   err   限流   线程   nbsp   

原文地址:https://www.cnblogs.com/hbhb/p/14342647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!