2,ThreadGroup 概念以及用法
2024-10-20 10:51:47
当一个任务需要多个子线程去处理业务,这时候不希望这些子线程杂乱无章, 就需要把这些线程统一管理起来,这时候线程组就产生了。
ThreadGroup 常用方法讲解
activeCount()
返回此线程组中活动线程的估计数。activeGroupCount()
返回此线程组中活动线程组的估计数。enumerate(Thread[] list)
把此线程组及其子组中的所有活动线程复制到指定数组中。enumerate(Thread[] list, boolean recurse)
把此线程组中的所有活动线程复制到指定数组中。interrupt()
中断此线程组中的所有线程。
package com.zyguo.thread; public class SleepRunnable implements Runnable{
private int sleepTime;
public SleepRunnable( int sleepTime ){
this.sleepTime = sleepTime;
}
@Override
public void run() {
try {
System.out.println( Thread.currentThread() + " begin sleep " + this.sleepTime );
Thread.sleep( sleepTime );
System.out.println( Thread.currentThread() + " end sleep " + this.sleepTime );
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.zyguo.thread; import java.util.ArrayList; public class ThreadGroupMain {
public static void main(String[] args) {
int threadNum = ;
final ThreadGroup tgroup = new ThreadGroup("test-threadgroup");
ArrayList<Thread> tList = new ArrayList<>();
//定义10个线程
for( int i = ; i < threadNum; i++ ){
Thread t = new Thread( tgroup, new SleepRunnable( + i*) ,"test-thread-" + i);
tList.add( t );
} System.out.println("before start, activeCount=" + tgroup.activeCount() ); //检验 enumerate 方法
Thread[] threads = new Thread[threadNum];
//获取所有的子线程
int num = tgroup.enumerate( threads );
System.out.println( "befor start thread, enumerate num=" + num );
for (Thread thread : tList) {
thread.start();
System.out.println("start thread = " + thread );
}
num = tgroup.enumerate( threads );
System.out.println( "all thread start, enumerate num=" + num ); //监控线程的活动的子线程数
Thread t = new Thread( new Runnable() {
@Override
public void run() {
int activeCount = tgroup.activeCount();
while ( activeCount > ) {
System.out.println("activeCount=" + activeCount );
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
activeCount = tgroup.activeCount();
}
System.out.println("all thread is stop, activeCount=" + activeCount );
}
}); t.start(); }
}
结果如下
before start, activeCount=
befor start thread, enumerate num=
start thread = Thread[test-thread-,,test-threadgroup]
Thread[test-thread-,,test-threadgroup] begin sleep
Thread[test-thread-,,test-threadgroup] begin sleep
start thread = Thread[test-thread-,,test-threadgroup]
start thread = Thread[test-thread-,,test-threadgroup]
start thread = Thread[test-thread-,,test-threadgroup]
Thread[test-thread-,,test-threadgroup] begin sleep
Thread[test-thread-,,test-threadgroup] begin sleep
start thread = Thread[test-thread-,,test-threadgroup]
Thread[test-thread-,,test-threadgroup] begin sleep
start thread = Thread[test-thread-,,test-threadgroup]
Thread[test-thread-,,test-threadgroup] begin sleep
start thread = Thread[test-thread-,,test-threadgroup]
Thread[test-thread-,,test-threadgroup] begin sleep
start thread = Thread[test-thread-,,test-threadgroup]
Thread[test-thread-,,test-threadgroup] begin sleep
start thread = Thread[test-thread-,,test-threadgroup]
Thread[test-thread-,,test-threadgroup] begin sleep
start thread = Thread[test-thread-,,test-threadgroup]
Thread[test-thread-,,test-threadgroup] begin sleep
all thread start, enumerate num=
activeCount=
activeCount=
activeCount=
activeCount=
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
activeCount=
Thread[test-thread-,,test-threadgroup] end sleep
all thread is stop, activeCount=
附上 ThreadGroup 所有的api
方法摘要 | |
---|---|
int |
activeCount() 返回此线程组中活动线程的估计数。 |
int |
activeGroupCount() 返回此线程组中活动线程组的估计数。 |
boolean |
allowThreadSuspension(boolean b) 已过时。 此调用的定义取决于 suspend(),它被废弃了。更进一步地说,此调用的行为从不被指定。 |
void |
checkAccess() 确定当前运行的线程是否有权修改此线程组。 |
void |
destroy() 销毁此线程组及其所有子组。 |
int |
enumerate(Thread[] list) 把此线程组及其子组中的所有活动线程复制到指定数组中。 |
int |
enumerate(Thread[] list, boolean recurse) 把此线程组中的所有活动线程复制到指定数组中。 |
int |
enumerate(ThreadGroup[] list) 把对此线程组中的所有活动子组的引用复制到指定数组中。 |
int |
enumerate(ThreadGroup[] list, boolean recurse) 把对此线程组中的所有活动子组的引用复制到指定数组中。 |
int |
getMaxPriority() 返回此线程组的最高优先级。 |
String |
getName() 返回此线程组的名称。 |
ThreadGroup |
getParent() 返回此线程组的父线程组。 |
void |
interrupt() 中断此线程组中的所有线程。 |
boolean |
isDaemon() 测试此线程组是否为一个后台程序线程组。 |
boolean |
isDestroyed() 测试此线程组是否已经被销毁。 |
void |
list() 将有关此线程组的信息打印到标准输出。 |
boolean |
parentOf(ThreadGroup g) 测试此线程组是否为线程组参数或其祖先线程组之一。 |
void |
resume() 已过时。 此方法只用于联合 Thread.suspend 和 ThreadGroup.suspend 时,因为它们所固有的容易导致死锁的特性,所以两者都已废弃。有关详细信息,请参阅 Thread.suspend()。 |
void |
setDaemon(boolean daemon) 更改此线程组的后台程序状态。 |
void |
setMaxPriority(int pri) 设置线程组的最高优先级。 |
void |
stop() 已过时。 此方法具有固有的不安全性。有关详细信息,请参阅 Thread.stop()。 |
void |
suspend() 已过时。 此方法容易导致死锁。有关详细信息,请参阅 Thread.suspend()。 |
String |
toString() 返回此线程组的字符串表示形式。 |
void |
uncaughtException(Thread t, Throwable e) 当此线程组中的线程因为一个未捕获的异常而停止,并且线程没有安装特定 Thread.UncaughtExceptionHandler 时,由 Java Virtual Machine 调用此方法。 |
最新文章
- Web App 压力测试
- 虚拟机备份克隆导致SQL SERVER 出现IO错误案例
- hadoop 安装教程 转载
- Hadoop的数据输入的源码解析
- IIS应用程序池最大进程数设置
- Spring----->;projects----->;Spring Web Flow
- 为什么你总是学不好Linux技术?这是我的答案。
- STL总结之functor
- 编程之美之数独求解器的C++实现方法
- codeforce 611B New Year and Old Property
- python装饰器大详解
- firewall服务配置
- zabbix图形化界面乱码(二)
- python导入方法,软件目录
- 【转】C#如何创建泛型类T的实例
- arcgis导oracle多步操作产生错误。请检查每一步的状态值。"; 如何解决?
- Windows下同一台机器上elasticsearch集群的配置以及elasticsearch-head插件的使用
- cocos2d-x开发记录:二,基本概念(动作,动画,坐标系统)
- C#的Winform中OpenFileDialog对话框Filter属性设置包含特定字符,使用正则表达式
- css总结2:Flex 布局教程:Flex 语法(转)