[英]Do two threads started in consecutive statements run at the same time, or do they run one after another?
看下面的代碼。 此代碼段中的所有語句都在主線程中執行。 線程是獨立的執行單元,即兩個不同的線程可以同時彼此獨立地執行,對嗎?
這是否意味着語句new Thread(new Consumer()).start();
一旦new Thread(new Producer()).start();
將被執行 語句的執行完成了(也就是說,當Producer
線程完成執行時,即Producer
的run()
方法返回后 )?
還是JVM只是進入並開始執行new Thread(new Consumer()).start();
語句,在它調用了第一個線程的start()
方法之后,即在第一個Producer
線程正在運行時 ?
public class ThreadsCoordinationUsingGuardedBlocks {
public static void main(String[] args) {
new Thread(new Producer()).start();
new Thread(new Consumer()).start();
}
}
兩個不同的線程可以同時執行,彼此獨立,對嗎?
它們也獨立啟動,這意味着它們可以按任何順序啟動,如果一個快速完成,它可能會在其他人甚至沒有啟動機會之前就停止。
Producer的run()方法返回后)?
因此有可能,線程也可能以相反的順序完成。
還是JVM只是進入並開始執行新的Thread(new Consumer())。start();? 聲明,
注意:JVM沒有實現線程。 這是操作系統的工作。 Java所做的只是對OS進行系統調用,以告訴它這樣做。 JVM不知道調用start()
多長時間后將調用那些線程的run()
。
您應該假設順序是不確定的。 Thread()
可能是一個可調度的事件,因此即使在單處理器上也無法保證執行順序,並且您可能也在多處理器上運行。
您的代碼應顯式處理同步-即使您所運行的實現的某些怪癖導致確定性的執行,顯式同步也可用於傳達代碼的意圖並防止基礎線程代碼的更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.