java线程并发countdownlatch类使用示例
java线程并发countdownlatch类使用示例
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:packagecom.yao;importjava.util.concurrent.CountDownLatch;impo...

复制代码 代码如下:

package com.yao;

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

/**

* CountDownLatch是个计数器,它有一个初始数,

* 等待这个计数器的线程必须等到计数器倒数到零时才可继续。

*/

public class CountDownLatchTest {

/**

* 初始化组件的线程

*/

public static class ComponentThread implements Runnable {

// 计数器

CountDownLatch latch;

// 组件ID

int ID;

// 构造方法

public ComponentThread(CountDownLatch latch, int ID) {

this.latch = latch;

this.ID = ID;

}

public void run() {

// 初始化组件

System.out.println("Initializing component " + ID);

try {

Thread.sleep(500 * ID);

} catch (InterruptedException e) {

}

System.out.println("Component " + ID + " initialized!");

//将计数器减一

latch.countDown();

}

}

/**

* 启动服务器

*/

public static void startServer() throws Exception {

System.out.println("Server is starting.");

//初始化一个初始值为3的CountDownLatch

CountDownLatch latch = new CountDownLatch(3);

//起3个线程分别去启动3个组件

ExecutorService service = Executors.newCachedThreadPool();

service.submit(new ComponentThread(latch, 1));

service.submit(new ComponentThread(latch, 2));

service.submit(new ComponentThread(latch, 3));

service.shutdown();

//等待3个组件的初始化工作都完成

latch.await();

//当所需的三个组件都完成时,Server就可继续了

System.out.println("Server is up!");

}

public static void main(String[] args) throws Exception {

CountDownLatchTest.startServer();

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Java学习
热门Java学习
编程开发子分类