Java中的ThreadGroup

Java中的ThreadGroup,java,multithreading,threadgroup,Java,Multithreading,Threadgroup,我目前正在学习Java中线程的基础知识,并试图编写一个简单的线程组程序。虽然我得到了不同类型的输出,但我写的和教程网站一样。下面是我得到不同输出的代码 public class ThreadGroupDemo implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName()); // get the nam

我目前正在学习Java中线程的基础知识,并试图编写一个简单的线程组程序。虽然我得到了不同类型的输出,但我写的和教程网站一样。下面是我得到不同输出的代码

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并发性的好书:

答案很简单:教程错了。唯一可以保证的是线程组名称将出现在线程组列表之前。这令人震惊。我建议你改用这个。别提了,反正它们也没用。设置线程的优先级也是如此。要加上可能的重复,即使家用计算机现在也有多个内核,能够实际并行运行多个线程。这使得新启动的线程更有可能被安排直接运行。