簡體   English   中英

在連續語句中啟動的兩個線程是否同時運行,還是一個接一個地運行?

[英]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線程完成執行時,即Producerrun()方法返回后 )?

還是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM