簡體   English   中英

當創建一個新線程時,每個單獨的線程是否都會創建自己的 run() 方法中定義的對象/方法 () 的副本?

[英]When a new thread is created does each individual thread make its own copy of the objects/methods() defined within the run() method?

所以我正在觀看 java 中的多線程教程,在教程中創建了一個擴展 Thread 類的類並覆蓋了 run() 方法,在 run 方法中調用了threadCountdown對象doCountDown()方法例子:

  class CountdownThread extends Thread{
    private Countdown threadCountdown;

    public CountdownThread(Countdown countdown){
        threadCountdown = countdown;
    }

    public void run(){
        threadCountdown.doCountdown();

    }
}

我的問題是,每次從上面的代碼創建一個新線程時,都會對 run() 方法中調用的內容制作一個單獨的副本,例如在上面的代碼中,將制作一個單獨的threadCountdown.doCountdown()方法何時創建新線程? 如果是這樣,那么整個對象也可以“復制”供線程使用嗎?

在上面的代碼片段中,所有產生的線程將共享同一個對象,存在於 heap 中


可能會出現這樣的情況,在並發環境中,多個線程可能運行在不同的 CPU(CPU 核心)上,為了更快的執行,他們可能更願意將對象保存在 CPU 緩存中,而不是從主內存中讀取。 最終,這將引發其他並發問題。

對於要創建單獨副本的線程,請切換到使用 ThreadLocal 變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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