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 抢到车位");
try{TimeUnit.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();
}