CountDownLatch用法---等待多个线程执行完才执行

it2022-05-05  154

CountDownLatch用法---等待多个线程执行完才执行

CountDownLatch用法---等待多个线程执行完才执行

CountDownLatch用法---等待多个线程执行完才执行

CountDownLatch用法---等待多个线程执行完才执行

一.CountDownLatch用法

CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。

CountDownLatch类只提供了一个构造器:

  1 public CountDownLatch( int count) {  };  //参数count为计数值

然后下面这3个方法是CountDownLatch类中最重要的方法:

1 2 3 public void await() throws InterruptedException { };   //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行 public boolean await( long timeout, TimeUnit unit) throws InterruptedException { };  //和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行 public void countDown() { };  //将count值减1

下面看一个例子大家就清楚CountDownLatch的用法了:

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 public class Test {       public static void main(String[] args) {             final CountDownLatch latch = new CountDownLatch( 2 );             new Thread(){               public void run() {                   try {                       System.out.println( "子线程" +Thread.currentThread().getName()+ "正在执行" );                      Thread.sleep( 3000 );                      System.out.println( "子线程" +Thread.currentThread().getName()+ "执行完毕" );                      latch.countDown();                  } catch (InterruptedException e) {                      e.printStackTrace();                  }               };           }.start();             new Thread(){               public void run() {                   try {                       System.out.println( "子线程" +Thread.currentThread().getName()+ "正在执行" );                       Thread.sleep( 3000 );                       System.out.println( "子线程" +Thread.currentThread().getName()+ "执行完毕" );                       latch.countDown();                  } catch (InterruptedException e) {                      e.printStackTrace();                  }               };           }.start();             try {               System.out.println( "等待2个子线程执行完毕..." );              latch.await();              System.out.println( "2个子线程已经执行完毕" );              System.out.println( "继续执行主线程" );          } catch (InterruptedException e) {              e.printStackTrace();          }       } }

执行结果:

1 2 3 4 5 6 7 线程Thread- 0 正在执行 线程Thread- 1 正在执行 等待 2 个子线程执行完毕... 线程Thread- 0 执行完毕 线程Thread- 1 执行完毕 2 个子线程已经执行完毕 继续执行主线程

转载于:https://www.cnblogs.com/panxuejun/p/8673139.html

相关资源:各显卡算力对照表!

最新回复(0)