Quando un thread su quattro sta eseguendo la prima riga in run (), allo stesso tempo cosa faranno i tre thread rimanenti?

0

Ho quattro istanze di thread e stanno eseguendo il codice run() indicato di seguito:

public void run (){
   System.out.println("1st line :"+Thread.CurrentThread().getName());
   System.out.println("2nd line :"+Thread.CurrentThread().getName());
   System.out.println("3rd line :"+Thread.CurrentThread().getName());
   System.out.println("4th line :"+Thread.CurrentThread().getName());
   System.out.println("5th line :"+Thread.CurrentThread().getName());
   System.out.println("6th line :"+Thread.CurrentThread().getName());
}

Quando un thread su quattro sta eseguendo la prima riga, allo stesso tempo cosa faranno i tre thread rimanenti?

O sono in attesa dell'esecuzione della prima riga o procederanno con altre righe di codice?

    
posta Avi 14.05.2014 - 22:08
fonte

2 risposte

1

Poiché tutti i thread eseguono lo stesso metodo, tutti stampano tutti le linee.

È come chiamare run() 4 volte, eccetto che, invece di aspettare che una chiamata finisca prima di iniziare, tutte le chiamate vengono eseguite contemporaneamente. L'ordine è diverso, ma tutte le linee sono ancora eseguite 4 volte.

Se vuoi eseguire run() una sola volta, ma in 4 thread diversi, dovrai utilizzare metodi più complessi e inevitabilmente ristrutturarlo in più metodi.

    
risposta data 14.05.2014 - 22:40
fonte
1

Ogni thread inizia sempre dalla prima riga. Nessun thread inizierà alla seconda o terza riga solo perché alcuni altri thread hanno eseguito il primo o il secondo; in effetti, nessuno dei thread sa dove si trovano gli altri thread nell'esecuzione del codice.

Non dovresti fare affidamento solo sull'esecuzione del codice multithread per capire cosa fa, dal momento che è possibile per gli implementatori del sistema di runtime modificare i dettagli di come funziona, e l'ordine e il tempo di esecuzione di ogni thread è imprevedibile.

Potrebbe essere utile pensare a thread separati come programmi separati che hanno accesso condiviso a uno spazio di memoria globale.

    
risposta data 16.05.2014 - 20:45
fonte

Leggi altre domande sui tag