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的主要内容,如果未能解决你的问题,请参考以下文章

Java总结——通过Callable接口实现多线程,生产者消费者问题,多线下载(复制)文件

java 多线程子线程唤醒主线程问题

十多线程控制类

JAVA-初步认识-第十二章-多线好处与弊端

实验二:多线程

DELPHI下的多线程程序设计