2016-02-01 2 views
6

私は現在、Javaのスレッドの基礎を学んでおり、簡単なスレッドグループプログラムを作成しようとしています。私は別のタイプの出力を得ていますが、チュートリアルのウェブサイトと同じように書きました。以下は、私は別の出力を得ている私のコードです。私は 出力取得していますThreadGroup in 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(); 
    } 

} 

:私は、なぜこの出来事を理解することはできませんよ

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] 

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] 

を出力するようにすべきですか? Priorityを設定するとそれを助けることができますか?

+0

答えは簡単です:チュートリアルが間違っています。実際に保証されるのは、スレッドグループ名がスレッドグループリストの前に現れることだけです。 – biziclop

+5

http://www.javatpoint.com/threadgroup-in-java –

+4

それは衝撃的です。代わりに[公式チュートリアル](https://docs.oracle.com/javase/tutorial/essential/concurrency/)を使用することをお勧めします。とにかく[thread groups](http://stackoverflow.com/questions/3265640/why-threadgroup-is-being-criticised)については忘れてしまいますが、とにかくそれは無駄です。スレッドの優先度も設定します。 – biziclop

答えて

3

スレッドの実行順序を優先順位で予測することはできません。あなたはスケジューリングを制御できません。それはあなたのOSです。

Javaでの同時実行性についての良い本:Java concurrency in practice

+0

これに加えて、家庭用コンピュータでさえも複数のコアがあり、実際に実行することができます並列に複数のスレッド。これにより、新たに開始されたスレッドがすぐに実行されるようにスケジューリングされる可能性が高くなります。 – biziclop