[英]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.