java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
本篇文章主要介绍了 Java 中多线程同步类 CountDownLatch 的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
在多线程开发中,常常遇到希望一组线程完成之后在执行之后的操作,java 提供了一个多线程同步辅助类,可以完成此类需求:
类中常见的方法:
其中构造方法:
CountDownLatch(int count) 参数 count 是计数器,一般用要执行线程的数量来赋值。
long getCount():获得当前计数器的值。
void countDown():当计数器的值大于零时,调用方法,计数器的数值减少 1,当计数器等数零时,释放所有的线程。
void await():调所该方法阻塞当前主线程,直到计数器减少为零。
代码例子:
线程类:测试类:
- import java.util.concurrent.CountDownLatch;
- public class TestThread extends Thread {
- CountDownLatch cd;
- String threadName;
- public TestThread(CountDownLatch cd, String threadName) {
- this.cd = cd;
- this.threadName = threadName;
- }@Override public void run() {
- System.out.println(threadName + " start working...");
- dowork();
- System.out.println(threadName + " end working and exit...");
- cd.countDown(); //告诉同步类完成一个线程操作完成
- }
- private void dowork() {
- try {
- Thread.sleep(2000);
- System.out.println(threadName + " is working...");
- } catch(InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- import java.util.concurrent.CountDownLatch;
- public class TsetCountDownLatch {
- public static void main(String[] args) {
- try {
- CountDownLatch cd = new CountDownLatch(3); // 表示一共有三个线程
- TestThread thread1 = new TestThread(cd, "thread1");
- TestThread thread2 = new TestThread(cd, "thread2");
- TestThread thread3 = new TestThread(cd, "thread3");
- thread1.start();
- thread2.start();
- thread3.start();
- cd.await(); //等待所有线程完成
- System.out.println("All Thread finishd");
- } catch(InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
输出结果:
- thread1 start working...
- thread2 start working...
- thread3 start working...
- thread2 is working...
- thread2 end working and exit...
- thread1 is working...
- thread3 is working...
- thread3 end working and exit...
- thread1 end working and exit...
- All Thread finishd
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持 PHPERZ!
来源: http://www.phperz.com/article/18/0101/357256.html