码迷,mamicode.com
首页 > 编程语言 > 详细

java多线程-ThreadGroup

时间:2019-02-16 23:12:58      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:unit   info   观察者   程序   task   Stub   static   result   技术   

  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提供了对线程组中信息的监控和反馈

 

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

 

java多线程-ThreadGroup

标签:unit   info   观察者   程序   task   Stub   static   result   技术   

原文地址:https://www.cnblogs.com/zek007/p/10389725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!