java多线程-ThreadGroup
Posted zek007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多线程-ThreadGroup相关的知识,希望对你有一定的参考价值。
ThreadGroup是位于java.lang包下的一个类,用于统一的线程管理.是一个低版本JDK引入的类
案例演示:
主方法:
package threadgroup;
import java.util.concurrent.TimeUnit;
/*
线程组只是提供了一种统计多个线程信息的方法,相当于建立了对线程的观察者模型
缺点:
并没有提供细粒度的对线程任务的管理
*
*/
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个线程组
ThreadGroup threadGroup=new ThreadGroup("Searcher");
Result result=new Result();
//Searcher是实现了runnable接口的线程类
Searcher searchTask=new Searcher(result);
for(int i=0;i<10;i++)
{
Thread thread=new Thread(threadGroup,searchTask);
thread.start(); //启动每一个创建的线程
try
{
TimeUnit.SECONDS.sleep(1);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println("===================");
System.out.println("线程组信息");
threadGroup.list();//打印线程组信息
System.out.println("===================");
//遍历线程组
Thread[] threads=new Thread[threadGroup.activeCount()];
threadGroup.enumerate(threads);//读出当前存活的线程
for(int i=0;i<threads.length;i++)
{
System.out.printf("Thread %s %s
",threads[i].getName(),threads[i].getState() );
}
waitFinish(threadGroup);
threadGroup.interrupt();
}
public static void waitFinish(ThreadGroup threadGroup)
{
while(threadGroup.activeCount()>9)
{
try
{
TimeUnit.SECONDS.sleep(1);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
Searcher类 实现了Runnable接口 重写run()方法
package threadgroup;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class Searcher implements Runnable{
private Result result;
public Searcher(Result result)
{
this.result=result;
}
@Override
public void run()
{
String name=Thread.currentThread().getName();
System.out.printf("Thread %s 启动
",name);
try
{
doTask();
result.setName(name);
}catch(InterruptedException e)
{
System.out.printf("Thread %s 被中断
", name);
return;
}
System.out.printf("Thread %s 完成
", name);
}
private void doTask() throws InterruptedException
{
Random random=new Random((new Date()).getTime());
int value=(int)(random.nextDouble()*100);
System.out.printf("Thread %s %d
", Thread.currentThread().getName(),value);
TimeUnit.SECONDS.sleep(value);
}
}
程序输出:
可以看到threadGroup提供了对线程组中信息的监控和反馈
但缺点很明显,并没有提供更低粒度的线程任务的调度和管理
以上是关于java多线程-ThreadGroup的主要内容,如果未能解决你的问题,请参考以下文章