Java中的ThreadGroup
问题描述:
我目前正在学习Java中的线程基础知识,并且正在尝试编写一个简单的线程组程序。虽然我得到了不同类型的输出,但我和教程网站一样写了它。下面是我的代码,我得到不同的输出。Java中的ThreadGroup
public class ThreadGroupDemo implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
// get the name of the current thread.
}
public static void main(String[] args) {
ThreadGroupDemo runnable = new ThreadGroupDemo();
ThreadGroup tg1 = new ThreadGroup("Parent Group");
// Creating thread Group.
Thread t1 = new Thread(tg1, new ThreadGroupDemo(), "one");
t1.start();
t1.setPriority(Thread.MAX_PRIORITY);
Thread t2 = new Thread(tg1, new ThreadGroupDemo(), "second");
t2.start();
t2.setPriority(Thread.NORM_PRIORITY);
Thread t3 = new Thread(tg1, new ThreadGroupDemo(), "Three");
t3.start();
System.out.println("Thread Group name : " + tg1.getName());
tg1.list();
}
}
我越来越 输出:
Thread Group name : Parent Group
Three
java.lang.ThreadGroup[name=Parent Group,maxpri=10]
second
one
Thread[one,10,Parent Group]
Thread[second,5,Parent Group]
Thread[Three,5,Parent Group]
输出应该是这样的:
one
two
three
Thread Group Name: Parent ThreadGroup
java.lang.ThreadGroup[name=Parent ThreadGroup,maxpri=10]
Thread[one,5,Parent ThreadGroup]
Thread[two,5,Parent ThreadGroup]
Thread[three,5,Parent ThreadGroup]
我不能够理解为什么会这样呢?设置优先级可以帮助它吗?
答
即使拥有一定的优先级,您也无法预测线程的执行顺序。您无法控制调度。这是你的操作系统决定的。
一本好书,关于并发在Java中:Java concurrency in practice
+0
此外,即使家庭计算机现在有多个核心,能够实际运行并行多线程。这使得新开始的线程更有可能计划立即运行。 – biziclop
答案很简单:本教程是错误的。唯一确实保证的是线程组名将出现在线程组列表之前。 – biziclop
http://www.javatpoint.com/threadgroup-in-java –
这很震撼。我建议你改用[官方教程](https://docs.oracle.com/javase/tutorial/essential/concurrency/)。并且忘掉[线程组](http://stackoverflow.com/questions/3265640/why-threadgroup-is-being-criticised),无论如何它们都是无用的。设置线程的优先级也是如此。 – biziclop