CountDownLatchCyclicBarrierSemaphore
Posted 亮子zl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CountDownLatchCyclicBarrierSemaphore相关的知识,希望对你有一定的参考价值。
CountDownLatch 康当辣吃
CountDownLatch(i int)
让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒
CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程会被阻塞。其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),
当计数器的值变为零时,因调用了await方法被阻塞的线程会被唤醒,继续执行。
public static void main(String[] args) throws Exception
CountDownLatch countDownLatch=new CountDownLatch(6);
for (int i=1;i<=6;i++)
new Thread(()->
System.out.println(Thread.currentThread().getName()+"\\t 上完自习,离开教室");
countDownLatch.countDown();
,String.valueOf(i)).start();
countDownLatch.await();
System.out.println(Thread.currentThread().getName()+"\\t ************班长最 后关门走人");
CyclicBarrier 塞克来克 拜尔优
作加法
public static void main(String[] args)
CyclicBarrier cyclicBarrier=new CyclicBarrier(parties:7,()->System.out.println("*************召唤神龙"););
for (int i=1;i<=7;i++)
new Thread(()->
System.out.println(Thread.currentThread().getName()+"\\t 收集到第:"+i+"龙珠");
try
cyclicBarrier.await();
catch(InterruptedException e)
e.printStackTrace();
catch(BrokenBarrierException e)
e.printStackTrace();
,String.valueOf(i)).start();
Semaphore 三么付
信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。
Semaphore semaphore = new Semaphore(permits:3);
for(int i=1;i<=6;i++)
new Thread(()->
try
semaphore.acquire();//进 饿快尔
System.out.println(Thread.currentThread().getName()+"\\t 抢到车位");
tryTimeUnit.SECONDS.sleep(timeout:3);catch(InterruptedException e)e.printStackTrace();
System.out.println(Thread.currentThread().getName()+"\\t 停3秒离开车位");
catch(InterruptedException e)
e.printStackTrace();
finally
semaphore.release();//释放 蕊力思
,String.valueOf(i)).start();
以上是关于CountDownLatchCyclicBarrierSemaphore的主要内容,如果未能解决你的问题,请参考以下文章