CountDownLatch

来源:互联网 发布:数据交换 安全 编辑:程序博客网 时间:2024/06/02 01:50


JavaSE 5的java.util.concurrent引入了大量设计用来解决并发问题的新类,学习使用它们有助于编写出更加简而健壮的编码。

1、CountDownLatch

被用来同步多个任务,强制等待由其它任务执行完成后再执行。

示例:

JobA.java

package thread;import java.util.concurrent.CountDownLatch;public class JobA extends Thread {private CountDownLatch cdl;public JobA(CountDownLatch cdl) {this.cdl = cdl;}public void run() {System.out.println("Job A doing something.");try {Thread.sleep(10000);} catch (Exception e) {e.printStackTrace();}System.out.println("Job A done.");cdl.countDown();}}
JobB.java

package thread;import java.util.concurrent.CountDownLatch;public class JobB extends Thread {private CountDownLatch cdl;public JobB(CountDownLatch cdl) {this.cdl = cdl;}public void run() {System.out.println("Job B doing something.");try {Thread.sleep(20000);} catch (Exception e) {e.printStackTrace();}System.out.println("Job B done.");cdl.countDown();}}
JobC.java

package thread;import java.util.concurrent.CountDownLatch;public class JobC extends Thread {private CountDownLatch cdl;public JobC(CountDownLatch cdl) {this.cdl = cdl;}public void run() {System.out.println("Job C waiting.");try {cdl.await();} catch (Exception e) {e.printStackTrace();}System.out.println("Job C done.");}}
ThreadTest.java

package thread;import java.util.concurrent.CountDownLatch;public class ThreadTest {public static void main(String[] args) {CountDownLatch cdl = new CountDownLatch(2);JobA jobA = new JobA(cdl);JobB jobB = new JobB(cdl);JobC jobC = new JobC(cdl);jobA.start();jobB.start();jobC.start();}}


输出如下:

Job B doing something.Job A doing something.Job C waiting.Job A done.Job B done.Job C done.




0 0
原创粉丝点击