线程组的作用还是挺大的!!
package mytest;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class ThreadGroupTest {
static class MyThreadGroup extends ThreadGroup {
public MyThreadGroup(String name) {
super(name);
}
// 设置未捕获异常
public void uncaughtException(Thread t, Throwable e) {
}
}
static class SearchTask implements Runnable {
private Result result;
public SearchTask(Result result) {
this.result = result;
}
@Override
public void run() {
String name = Thread.currentThread().getName();
System.out.println("Thread start:" + name);
try {
doTask();
result.setName(name);
} catch (InterruptedException e) {
System.out.println(e);
return;
}
System.out.println("Thread end:" + name);
}
private void doTask() throws InterruptedException {
Random random = new Random(new Date().getTime());
//random.netInt()如果括号里加上100,那就是生成0-100(不包括100)的随机数。
//random.nextDouble() 传回0.0到1.0之间的随机数。
int value = (int) (random.nextDouble() * 100);
System.out.println(Thread.currentThread().getName() + " will sleep " + value + " seconds");
TimeUnit.SECONDS.sleep(value);
}
public static void main(String[] args) {
ThreadGroup tg = new ThreadGroup("searcher");
Result result = new Result();
SearchTask st = new SearchTask(result);
for (int i = 0; i < 5; i++) {
Thread thread = new Thread(tg, st);
thread.start();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("alive count :" + tg.activeCount());
System.out.println("infomation about group :");
tg.list();// 打印存活的线程
Thread[] threads = new Thread[tg.activeCount()];
tg.enumerate(threads);// 获取存活的线程到数组中
for (int i = 0; i < tg.activeCount(); i++) {
System.out.printf("Thread %s: %s\n", threads[i].getName(), threads[i].getState());
}
while (tg.activeCount() > 0) {
System.out.println("i am waiting for you!");
}
}
}
static class Result {
private String name;
public Result() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}