CountDownLatch、ExecutorService的使用
程序员文章站
2022-03-24 12:37:54
...
public class TestService {
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(50);
//开启一个线程池
ExecutorService executor = Executors.newCachedThreadPool();
//执行TestThread里面的run方法
executor.execute(new TestThread(countDownLatch));
executor.execute(new TestThread(countDownLatch));
executor.execute(new TestThread(countDownLatch));
//线程池不再接受新的任务
executor.shutdown();
}
}
-
executor.execute(new TestThread(countDownLatch));
这段传入的是一个实现Runnable
接口的类,执行的方法则是run
方法里面的内容,每一个execute
则是开启一个线程
public class TestThread implements Runnable{
private CountDownLatch countDownLatch;
public TestThread( CountDownLatch countDownLatch ){
this.countDownLatch = countDownLatch;
}
public void run() {
while (countDownLatch.getCount() >0){
countDownLatch.countDown();
System.out.println("输出:"+Thread.currentThread()+">>>"+ countDownLatch.getCount());
}
}
}
-
CountDownLatch countDownLatch = new CountDownLatch(50);
这段是启用一个线程辅助类,传入的参数是一个int
类型的计数,在TestThread
中的run
方法中,每执行一次,通过调用countDownLatch.countDown();
方法计数减一,当计数内容为0
时,则子线程全部执行完成,此时主线程才能继续往下执行。
输出结果
输出:Thread[pool-1-thread-1,5,main]>>>49
输出:Thread[pool-1-thread-1,5,main]>>>47
输出:Thread[pool-1-thread-1,5,main]>>>46
输出:Thread[pool-1-thread-1,5,main]>>>45
输出:Thread[pool-1-thread-1,5,main]>>>44
输出:Thread[pool-1-thread-1,5,main]>>>43
输出:Thread[pool-1-thread-1,5,main]>>>42
输出:Thread[pool-1-thread-1,5,main]>>>41
输出:Thread[pool-1-thread-1,5,main]>>>40
输出:Thread[pool-1-thread-2,5,main]>>>48
输出:Thread[pool-1-thread-1,5,main]>>>39
输出:Thread[pool-1-thread-2,5,main]>>>38
输出:Thread[pool-1-thread-3,5,main]>>>36
输出:Thread[pool-1-thread-1,5,main]>>>36
输出:Thread[pool-1-thread-3,5,main]>>>34
...
具体用法请google
上一篇: 关于遇到Cause: org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 5; 1 字节的 UTF-8 序列的字节 1 无效。的问题
推荐阅读
-
smarty模板引擎中内建函数if、elseif和else的使用方法
-
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
-
ps修复画笔工具的使用技巧 photoshop修复画笔工具怎么用?
-
Oracle密码文件的使用和维护第1/3页
-
photoshop选区工具的使用教程[图文]
-
ps中渐变映射调整图层如何定义及其各项参数的使用技巧
-
jsp中使用frameset框架 边框固定不让更改边框的大小
-
Android Studio 通过一个登录功能介绍SQLite数据库的使用
-
在Linux中使用Attic管理备份数据的操作详解
-
纯小白入手 vue3.0 CLI - 3.2 - 路由的初级使用