3,ThreadGroup 的使用场景以及用法
1 一个大型任务,可分成多个独立的子线程并发进行,最后等待所有的子线程执行结束然后继续往下执行,
使用场景比如
要查找某个用户的最近三个月的通话记录,起 3 个子线程,分别查找最近三个月的记录,然后通过
int activeCount = tgroup.activeCount();
while ( activeCount > ) {
System.out.println("activeCount=" + activeCount );
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
activeCount = tgroup.activeCount();
}
阻塞住主线程,直到三个子线程全部执行结束,activeCount() == 0,继续玩下执行
2,一个大型任务,可分成多个独立的子线程并发进行,只要其中的某个子线程完成了任务条件,就算任务完成,则调用 threadGroup.interrupt() 方法 其他的子线程就可以停止了
使用场景如
用户表按用户ID分成了10个表,这时候想通过用户昵称找到这个用户,则这时候就可以使用threadGroup中的 interrupt 来实现了
package com.zyguo.thread;
public class SearchRunnable implements Runnable{
private int sleepTime;
public SearchRunnable( int sleepTime ){
this.sleepTime = sleepTime;
}
@Override
public void run() {
try {
System.out.println( Thread.currentThread() + " begin search " );
Thread.sleep( sleepTime );
System.out.println( Thread.currentThread() + " end search, 耗时 " + this.sleepTime );
} catch (InterruptedException e) {
System.out.println( Thread.currentThread() + " 被中断 " );
//e.printStackTrace();
}
}
}
package com.zyguo.thread;
import java.util.ArrayList;
public class ThreadGroup_interrupt {
public static void main(String[] args) {
int threadNum = ;
final ThreadGroup tgroup = new ThreadGroup("search-threadgroup");
ArrayList<Thread> tList = new ArrayList<>();
//定义10个线程
for( int i = ; i < threadNum; i++ ){
Thread t = new Thread( tgroup, new SearchRunnable( + i*) ,"search-thread-" + i);
tList.add( t );
t.start();
System.out.println("start thread = " + t );
}
//监控线程的活动的子线程数
Thread t = new Thread( new Runnable() {
@Override
public void run() {
int activeCount = tgroup.activeCount();
while ( activeCount > ) {
System.out.println("activeCount=" + activeCount );
if( activeCount < ){
System.out.println("找到了需要的文件,开始终止其他的子线程" );
tgroup.interrupt();
break;
}
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
activeCount = tgroup.activeCount();
}
}
});
t.start();
}
}
结果如下
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
Thread[search-thread-,,search-threadgroup] begin search
start thread = Thread[search-thread-,,search-threadgroup]
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
start thread = Thread[search-thread-,,search-threadgroup]
Thread[search-thread-,,search-threadgroup] begin search
activeCount=
activeCount=
activeCount=
activeCount=
activeCount=
Thread[search-thread-,,search-threadgroup] end search, 耗时
activeCount=
Thread[search-thread-,,search-threadgroup] end search, 耗时
activeCount=
Thread[search-thread-,,search-threadgroup] end search, 耗时
activeCount=
Thread[search-thread-,,search-threadgroup] end search, 耗时
activeCount=
Thread[search-thread-,,search-threadgroup] end search, 耗时
activeCount=
Thread[search-thread-,,search-threadgroup] end search, 耗时
activeCount=
找到了需要的文件,开始终止其他的子线程
Thread[search-thread-,,search-threadgroup] 被中断
Thread[search-thread-,,search-threadgroup] 被中断
Thread[search-thread-,,search-threadgroup] 被中断
Thread[search-thread-,,search-threadgroup] 被中断
3,ThreadGroup 的使用场景以及用法的更多相关文章
- SharedPreferences 的另一种场景的用法
SharedPreferences 的另一种场景的用法 昨天,下班在家想做什么来着,然后想用SharedPreferences存点数据,但是不知道咋地突然想到,SharedPreferences是应用 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- yii框架场景的用法
1.在 model 里面定义一下场景 类名必须是 scenarios() public function scenarios() { return [ 'create' => ['title', ...
- ognl表达式应用场景和用法
ognl表达式的用法和应用场景 1.配置文件 //书写方式是:'${@类全限定名@常量}' dic_city.type=${@com.imooc.constant.DictionaryConstant ...
- 第十五节:深入理解async和await的作用及各种适用场景和用法
一. 同步VS异步 1. 同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调用时无须等待返回结果,可以继续往下执行业务 开启新线程:在主线程之外 ...
- 深入理解async和await的作用及各种适用场景和用法
https://www.cnblogs.com/yaopengfei/archive/2018/07/02/9249390.html https://www.cnblogs.com/xianyudot ...
- RunLoop 总结:RunLoop的应用场景(一)
参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看.我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料.关于iOS 中的RunLoop资料非 ...
- 深入分析@Transactional的用法
关键词:事务, 编程式事务,声明式事务.spring 事务管理.AOP事务增强.@Transactional 在分析深入分析@Transactional的使用之前,我们先回顾一下事务的一些基本内容. ...
- python+selenium自动化软件测试(第4章):场景判断与封装
4.1 显示等待WebDriverWait 前言:在脚本中加入太多的sleep后会影响脚本的执行速度,虽然implicitly_wait()这种隐式等待在一定程度上节省了很多时间.但是一旦页面上某些j ...
随机推荐
- 每个内存大小:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Size:"
CPU: 型号:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}' 数量:lscpu |grep "CPU ...
- ubuntu16.04 qt opencv3.4
#------------------------------------------------- # # Project created by QtCreator 2018-12-12T14:53 ...
- Java基础——常用类型转换
关于类型转化问题: (1)String--------->char / char[ ] String str = "ab"; char str1 = str.charAt(0 ...
- 白盒测试实践项目(day5)
在这几天的工作下,小组成员都基本完成了各自所负责的内容. 李建文同学完成提交了代码复审相关文档后,也经过小组的补充,彻底完成. 汪鸿同学使用FIndBugs工具完成了静态代码的测试,并且也完成了静态代 ...
- centos7如何知道jdk的在哪个目录
今天一个小实验需要安装jdk,用命令Java -version查询了一下,原来Centos7自带OpenJDK的环境,但是需要手动配置/etc/profile文件,于是开始找java的安装路径.... ...
- springboot+swagger集成
一.swagger介绍 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容 ...
- javascript总结23:javascript 数据类型与变量
1 基本类型和引用类型 JavaScript中的数据类型分为两类:基本类型和引用类型 基本类型:直接存储值,画图解释 Number.String.Boolean Undefined.Null 引用类 ...
- Word2013写CSDN博客
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- zrender源码分析2--初始化Storage
接上次分析到初始化ZRender的源码,这次关注内容仓库Storage的初始化 入口1:new Storage(); // zrender.js /** * ZRender接口类,对外可用的所有接口都 ...
- C#函数式程序设计之泛型(上)
在面向对象语言中,我们可以编写一个元素为某个专用类型(可能需要为此创建一个ListElement)的List类,或者使用一个非常通用.允许添加任何类型元素的基类(在.NET中,首先想到的是System ...