2016-02-01 4 views
6

Attualmente sto imparando le basi dei thread in Java e sto provando a scrivere un semplice programma Thread Group. Ho scritto lo stesso come sito web tutorial anche se sto ottenendo diversi tipi di output. Di seguito è riportato il mio codice per il quale sto ottenendo risultati diversi.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(); 
    } 

} 

sto ottenendo uscita:

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] 

L'output dovrebbe essere come:

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] 

io non sono in grado di capire perché questo accada? impostare la priorità può aiutare con esso?

+0

La risposta è semplice: il tutorial è sbagliato. L'unica cosa che è effettivamente garantita è che il nome del gruppo di thread verrà visualizzato prima dell'elenco dei gruppi di thread. – biziclop

+5

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

+4

È scioccante. Ti consiglio di utilizzare il [tutorial ufficiale] (https://docs.oracle.com/javase/tutorial/essential/concurrency/). E dimentica [gruppi di thread] (http://stackoverflow.com/questions/3265640/why-threadgroup-is-being-criticised), sono comunque abbastanza inutili. E così è l'impostazione della priorità di un thread. – biziclop

risposta

3

Non è possibile prevedere l'ordine di esecuzione dei thread anche con un livello di priorità. Non hai il controllo sulla programmazione. È il tuo sistema operativo che decide.

Un buon libro sulla concorrenza in Java: Java concurrency in practice

+0

Per aggiungere a questo, anche i computer di casa ora hanno più core, in grado di funzionare effettivamente più thread in parallelo. Il che rende più probabile l'esecuzione immediata di un nuovo thread avviato. – biziclop