🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### CountDownLatch CountDownLatch对象指定一个基数,每次执行countDown()方法,基数减一,直到这个基数为0时,执行await()方法后的代码。一般await用于主方法中。 - 构造器方法 ``` 构造器: CountDownLatch(int num); // 给定义的CountDownLatch指定一个数值 方法: await(); // 等待直到传入CountDownLatch对象中数值为0,再执行后面代码。 await(long time, TimeUnit timeUnit); // 设置等待超时时间,如果再规定时间内CountDownLatch对象中数值没有为0,则报错,CountDownLatch失效。 countDown(); // 传入CountDownLatch对象中数值减一 ``` - 例子 ``` public void CountDownLatchTest(){ int threadCount = 4; CountDownLatch countDownLatch = new CountDownLatch(threadCount); ExecutorService executorService = Executors.newSingleThreadExecutor(); for (int i = 0; i < threadCount; i++) { executorService.execute(new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } countDownLatch.countDown(); System.out.println("当前线程"+Thread.currentThread().getName()+"执行完毕"); } })); } executorService.shutdown(); System.out.println("等待线程执行完毕....."); countDownLatch.await(); System.out.println("所有线程执行完"); } ``` #### CyclicBarrier CyclicBarrier对象指定一个基数,每次执行await()方法时,基数减一,直到这个基数为0时,执行await()方法后的代码。一般await用于线程方法中。 - 构造器方法 ``` 构造器: CyclicBarrier(int num); // 给定义的CountDownLatch指定一个数值 CyclicBarrier(int num, Runnable r); // 给定义的CountDownLatch指定一个数值, 第二个参数指当基数为0时,创建一个线程参数为r的线程并执行,直到该线程执行结束后开始执行await方法后面的代码 方法: await(); // 每次执行await()方法时,传入CyclicBarrier基数num减一,直到num为0,才执行await方法后续的代码。 await(long time, TimeUnit timeUnit); // 同await方法,设定了等待的超时时间,如果超时,则会报超时错误,并且CyclicBarrier失效。 ``` - 例子 ``` public void CyclicBarrierTeset(){ for(int i = 0 ; i < 10 ; i++) { Thread.sleep(1000); new Thread(() ->{ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "执行"); try { cyclicBarrier.await(); } catch (BrokenBarrierException | InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("达到定义数目,wait方法后代码执行"); }).start(); } System.in.read(); } ```