并发编程-concurrent.util工具类中的使用

本文深入介绍了Java并发编程中两个核心工具:CountDownLatch和CyclicBarrier的使用方法与场景。CountDownLatch用于实现线程间的同步等待,确保主线程等待其他线程执行完毕后再继续执行;而CyclicBarrier则适用于一组线程互相等待,直至到达某个屏障点,所有线程才能继续运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念:

    该工具包下的类是用于在多任务下并发工具类。

    1、CountDownLatch

       该类类似于wait,notify的作用。

      应用场景:在多线程并发中,一个线程执行前提是需要另一个线程执行之后才能执行。

     其中final CountDownLatch countDown=new CountDownLatch(2);构造函数中的参数表示其它线程调用countDown.countDown()的次数。也就是说如果是2,那么在其它线程中调用两次countDown()方法,才会唤醒等待线程的执行。

import java.util.concurrent.CountDownLatch;


public class CountDownLatchs {




    public static void main(String[] args) {

    final CountDownLatch countDown=new CountDownLatch(2);
   
    Thread thread1=new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub

System.out.println("任务一开始执行");
try {
countDown.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
System.out.println("任务一执行完成");


}
});
   
  Thread thread2=new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub

System.out.println("任务二开始执行");
countDown.countDown();;
System.out.println("唤醒任务一执行");


}
});
  
  Thread thread3=new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub

System.out.println("任务三开始执行");
countDown.countDown();;
System.out.println("唤醒任务一执行");


}
});

  thread1.start();
  thread2.start();
  thread3.start();
 
   
   
   
   
}
     





}

    


    2、CyclicBarrier

       几运动员在比赛时,如果有一个运动员没有准备好,那么比赛就不 能开始,只有所有运动员都准备好后,比赛才开始。

       
import java.lang.reflect.Executable;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class CylicBarriers implements Runnable {


private CyclicBarrier barrier;
private String name ;

public CylicBarriers(CyclicBarrier barrier,String name) {
// TODO Auto-generated constructor stub
 
this.barrier=barrier;
this.name=name;
 
}



@Override
public void run() {
// TODO Auto-generated method stub

System.out.println("运动员---"+this.name+"--准备ok");

try {
this.barrier.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

    System.out.println("运动员-----"+this.name+"---go");

}


public static void main(String[] args) {

CyclicBarrier barrier=new CyclicBarrier(2);

ExecutorService executor= Executors.newFixedThreadPool(2);

executor.execute(new CylicBarriers(barrier,"张三"));

executor.execute(new CylicBarriers(barrier,"李四"));
executor.shutdown();




}





}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值