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 \n",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 启动\n",name);
try
{
doTask();
result.setName(name);
}catch(InterruptedException e)
{
System.out.printf("Thread %s 被中断\n", name);
return;
}
System.out.printf("Thread %s 完成\n", 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 \n", Thread.currentThread().getName(),value);
TimeUnit.SECONDS.sleep(value);
}

}

程序输出:

可以看到threadGroup提供了对线程组中信息的监控和反馈

但缺点很明显,并没有提供更低粒度的线程任务的调度和管理 

猜你喜欢

转载自www.cnblogs.com/zek007/p/10389725.html