2016-04-04 26 views
0
public class ThreadTest extends Thread { 
    public static void main(String[] args) { 
    new ThreadTest().start(); 
    for (int i = 0; i < 10; i++) { 
     System.out.format("%s %d\n", Thread.currentThread(), i); 
    } 
    } 
    public void run() { 
    for (int i = 0; i < 10; i++) { 
     System.out.format("%s %d\n", Thread.currentThread(), i); 
    } 
    } 
} 

çıktısı:sırasının çalışan kendim ve ana iş parçacığı oluşturulan budur iplik

Thread[Thread-0,5,main] 0 
Thread[main,5,main] 0 
Thread[main,5,main] 1 
Thread[main,5,main] 2 
Thread[main,5,main] 3 
Thread[main,5,main] 4 
Thread[main,5,main] 5 
Thread[main,5,main] 6 
Thread[main,5,main] 7 
Thread[main,5,main] 8 
Thread[main,5,main] 9 
Thread[Thread-0,5,main] 1 
Thread[Thread-0,5,main] 2 
Thread[Thread-0,5,main] 3 
Thread[Thread-0,5,main] 4 
Thread[Thread-0,5,main] 5 
Thread[Thread-0,5,main] 6 
Thread[Thread-0,5,main] 7 
Thread[Thread-0,5,main] 8 
Thread[Thread-0,5,main] 9 

Ben ipler üzerinde çalışan sırayla hakkında karıştı. Yeni ThreadTest.start olduğunda, ilk olarak run() yöntemini çalıştırır. Ama neden çıktı 0 ve ana iş parçacığı çalışmaya devam etti, çıktı benim için açıklayabilir misin?

Önceden teşekkür ederiz.

+5

iş parçacığı iş parçacığı tarafından zamanlamaya karar verdi. programcı değil. –

+1

her ikisi de, her iki döngüye 'Thread.sleep (1000); 'eklemeyi dener ve sonucu görür. – Kaushal28

cevap

2

System.out.println senkronize bir yöntemdir ve bir iş parçacığı bir kilit yakaladığında, kilidi tekrar kapama tercihi vardır. Bu durumda, main kilidi almayı ve ana döngü bitene kadar almayı sürdürmeyi başarıyor. Bunu tekrar çalıştırırsanız, çıktıyı farklı bir sırada almanız olasıdır.

+0

Oh, anladım. Sağol Peter – codemonkey