31
2013
07

JAVA中如何等待所有子线程处理完毕

多线程开发中,经常会遇到某个操作需要等待其它线程处理完毕才能执行。比如主线程要等若干个数据库提交线程处理完毕后关闭数据库连接,如果用join会让线程变成顺序执行,失去了多线程的意义,如果用计数来标记逻辑上又混乱,这里介绍JAVA提供的一个多线程同步工具类:

java.util.concurrent.CountDownLatch
 

CountDownLatch使用很简单,在构造的时候指定线程的数量标记,每当一个子线程run()执行完毕以后调用一次其countDown()方法来标记一个线程执行结束。在主线程中通过await()方法来完成与其它线程的同步。

代码示例:

主线程中:

int threadsCount=100;

CountDownLatch countDownLatch = new CountDownLatch(threadsCount) ;

for(int i=0;i<threadsCount;i++)

{

    new Thread(new SubThread(countDownLatch)).start();

}

countDownLatch.await();

System.out.println(“所有线程执行完毕!”);

子线程中代码:

class SubThread implements Runnable
{
    private CountDownLatch threadsSignal;
    SubThread(CountDownLatch threadsSignal)
    {
        this.threadsSignal = threadsSignal;
    }
    @Override
    public void run()
    {

        doSomething();

        threadsSignal.countDown();

    }
}

« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。