首页 > 代码库 > java多线程编程之CountDownLatch
java多线程编程之CountDownLatch
java.util.concurrent.CountDownLatch这个类里面的主要方法为:
1.countDown(),Decrements the count of the latch, releasing all waiting threads if the count reaches zero.
2.await(),Causes the current thread to wait until the latch has counted down to zero, unless the thread is interrupted.
//Runner.java package com.cc; import java.util.concurrent.CountDownLatch; public class Runner implements Runnable{ private CountDownLatch latch; private int index; public Runner(int index){ this.index = index; } public Runner(CountDownLatch latch, int index){ this.latch = latch; this.index = index; } @Override public void run() { // TODO Auto-generated method stub try { Thread.sleep(10); latch.countDown(); System.out.println("latch countDown :"+this.index); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("latch countDown:"+this.index+"end"); } public CountDownLatch getLatch() { return latch; } public void setLatch(CountDownLatch latch) { this.latch = latch; } } //test.java package com.cc; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; public class test { public static void main(String[] args) { // TODO Auto-generated method stub CountDownLatch latch = new CountDownLatch(10); ExecutorService execServ = Executors.newFixedThreadPool(10); for (int i = 0; i < 10; i++) { execServ.submit(new Runner(latch, i)); } try { Thread.sleep(1); latch.await(); System.out.println("latch await through pass"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("--end--"); } }
//Runner.java package com.cc; import java.util.concurrent.CountDownLatch; public class Runner implements Runnable{ private CountDownLatch latch; private CountDownLatch backLatch; private int index; public Runner(int index){ this.index = index; } public Runner(CountDownLatch latch, CountDownLatch backLatch, int index){ this.latch = latch; this.backLatch = backLatch; this.index = index; } @Override public void run() { // TODO Auto-generated method stub try { System.out.println("latch countDown :"+this.index); latch.countDown(); System.out.println("latch:"+this.index); backLatch.await(); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } System.out.println("latch countDown:"+this.index+"end"); } public CountDownLatch getLatch() { return latch; } public void setLatch(CountDownLatch latch) { this.latch = latch; } public CountDownLatch getBackLatch() { return backLatch; } public void setBackLatch(CountDownLatch backLatch) { this.backLatch = backLatch; } } //Test.java package com.cc; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub CountDownLatch latch = new CountDownLatch(10); CountDownLatch backLatch = new CountDownLatch(1); ExecutorService execServ = Executors.newFixedThreadPool(10); for (int i = 0; i < 10; i++) { execServ.submit(new Runner(latch, backLatch,i)); } try { latch.await(); System.out.println("latch await through pass"); backLatch.countDown(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("--end--"); } }
java多线程编程之CountDownLatch
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。