[英]Multithreading in Java
這是我的代碼
public class ThreadLearn{
private static class Check implements Runnable{
public void run(){
System.out.printf("\nInCheck %s", Thread.currentThread().getName());
}
}
public static void main(String[] args){
Thread t;
int i=0;
while(i<2){
t = new Thread(new GetData());
t.start();
System.out.printf("\n%s: ", t.getName());
i++;
}
}
}
輸出為:
InRun Thread-0
Thread-0:
Thread-1:
InRun Thread-1
我有兩個問題:
輸出不應該是
InRun線程-0
線程-0:
InRun線程1
線程1:
一旦完成t.start()
,它將等待run()
執行然后創建第二個線程嗎? 如果我想執行以下操作怎么辦
while(必填)
新的Thread()。start();
在我的運行方法中,我可以擁有所有我希望線程並行完成的工作,這樣它就不會等待一個線程完成運行方法,然后創建第二個線程。
謝謝
輸出不應該是...
否。線程彼此獨立運行。 JVM和操作系統決定何時運行哪個線程。 通常,執行兩個線程的順序是不可預測的。 很有可能發生,當您再次運行該程序時,結果會有所不同。
一旦完成
t.start()
,它將等待run()
執行然后創建第二個線程嗎?
不,它不會等待。 新線程的run()
方法可能立即啟動,也可能稍后啟動,具體取決於線程的調度方式。
當線程啟動時,它就啟動了。 因此,兩個System.out幾乎在同一時間執行,導致它們有時會更改順序
例:
---- thread-0 prints out
Main thread |--- Prints out ----------- Prints out
|Thread-1 started, prints out
如您所見,這些分支將與主代碼幾乎同時運行,從而導致它們之間波動,而實際上它們首先會打印出來
由於您未提供任何同步機制,因此無法確定要首先執行哪個線程的方法。 在不同的運行中,可能還有其他順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.