2016-02-01 1 views
6

Ich lerne derzeit Grundlagen von Threads in Java und versuche ein einfaches Thread Group Programm zu schreiben. Ich schrieb es gleich wie Tutorial-Website, obwohl ich unterschiedliche Art der Ausgabe bekomme. Unten ist mein Code, für den ich unterschiedliche Ausgabe bekomme.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(); 
    } 

} 

Ich erhalte Ausgang:

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] 

Die Ausgabe sollte wie:

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] 

ich nicht in der Lage bin dies zu verstehen, warum? Einstellung der Priorität kann dabei helfen?

+0

Die Antwort ist einfach: das Tutorial ist falsch. Das einzige, was tatsächlich garantiert ist, ist, dass der Name der Threadgruppe vor der Threadgruppenliste erscheint. – biziclop

+5

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

+4

Es ist schockierend. Ich rate Ihnen stattdessen, das [offizielle Tutorial] (https://docs.oracle.com/javase/tutorial/essential/concurrency/) zu verwenden. Und vergessen Sie [Thread-Gruppen] (http://stackoverflow.com/questions/3265640/why-threadgroup-is-being-criticised), sie sind sowieso ziemlich nutzlos. Und so legt man die Priorität eines Threads fest. – biziclop

Antwort

3

Sie können die Reihenfolge der Ausführungen Ihrer Threads nicht mit Priorität vorhersagen. Sie haben keine Kontrolle über die Planung. Es ist dein Betriebssystem, das entscheidet.

Ein gutes Buch über Nebenläufigkeit in Java: Java concurrency in practice

+0

Hinzu kommt, dass sogar Heimcomputer jetzt mehrere Kerne haben, die tatsächlich ausgeführt werden können mehrere Threads parallel. Dies macht es wahrscheinlicher, dass ein neu gestarteter Thread so geplant wird, dass er sofort ausgeführt wird. – biziclop