使用线程池时让所有线程都执行完再进行下一步
来源:互联网 发布:优酷为什么显示没网络 编辑:程序博客网 时间:2024/05/23 18:28
我们知道,当不使用线程池时,想让A线程在B线程执行完之后执行,需要在A中的某个调用处,调用B.join,但如果使用jdk1.5以后提供的线程池ExecutorService,这个就用不上了,用了会出同步问题,其实这个场景应该是很常见的吧,比如你用多线程并发执行一些操作,当这些操作全部完成时才能进行下一步,这就是需要这个功能了。后来偶然在网上看到有人说用ExecutorService.invokeAll可以实现,测试了一下,确实简单。这个方法的定义如下:
你需要传一个Callable实现类元素的集合给此方法,每个元素就是一个线程了,返回值是线程执行结果的集合,声明的异常,按照文档的说法---if interrupted while waiting, in which case unfinished tasks are cancelled,如果执行时出现了中断异常,其它未执行完的线程会取消,但我经过测试,发现并没有取消,仍旧正常执行了。下面给出个小例子:
逻辑极其简单,启动200个线程,每个线程先生成一个随机数,如果大于5就抛出异常,中止,否则,睡10秒钟,再输出自己的名字。如果输出结果是200条,说明不管有没有线程抛出异常,其它异常仍旧会照常执行,使用完毕后一定要记得shutdown线程池,否则程序一直挂在那儿无法终止。运行结果,done总是在最后一行输出,说明它总是等池里的所有线程执行完后才会执行到这一步,这样你就可以把第二步的逻辑写到这里就行了。解决了很大的问题。
- 使用线程池时让所有线程都执行完再进行下一步
- 判断线程池执行完,再执行下一步操作
- java中等待所有线程都执行结束
- Java中等待所有线程都执行结束
- 多个子线程并发执行,主线程等待所有子线程都结束后再继续运行
- 一件事由多个线程一起完成后再执行下一步的操作
- Java多个子线程都执行完后,再执行主线程
- 执行完线程1再执行线程2 以及线程1和线程2共同执行
- c# Task多线程并行任务中等待所有线程都执行完成
- 多线程中主线程等待所有子线程执行完再继续执行的解决方法
- JAVA主线程等待所有子线程执行完成后主线程再执行
- .net判断线程池中的所有线程都已完成
- 主线程等待所有子线程完成后再执行
- 线程执行的顺序 等线程执行完再执行下一个线程
- java 等待所有线程执行完毕
- 追踪线程池所有线程是否执行完毕
- 另外,Volley中所有的请求都在一个额外线程中执行,而不会阻塞你的“主线程”。
- MFC 线程创建在使用构造函数进行初始化线程的时候,创建线程实例了,但是线程并没有执行的问题
- SQL 中怎么查询一个数据库中一共有多少个表
- 将你的Asp.NET应用程序嵌入到SharePoint 读后感
- 实例说明:源码包生成RPM格式
- XMPP协议学习笔记三(Openfire服务器端搭建开发环境)
- Json反射成对象(随笔日记)
- 使用线程池时让所有线程都执行完再进行下一步
- 如何编写C# Windows服务
- 关于值传递(高手请无视)
- Oracle 中 keep 的用法
- Doxygen 的图表 dot
- Validate插件简单例子
- 今天公司内部面试的一些题!support job
- C# 图片浏览上传并形成缩略图
- 控制器分组:Area