一、不共享變數的執行緒
1.方法建立變數
class
program
static
voidgo(
)}}
thread執行緒開始時會建立done變數;
主線程開始時也會建立done變數;
結果會輸出兩個done;
2.本地變數
class
program
}class
threaddemo
}}
有乙個本地變數done值為fallse。因為執行緒是呼叫的是有引數的方法,所以使用parameterizedthreadstart 進行封裝threaddemo物件的go方法,把done值傳進去,然後主線程在呼叫threaddemo.go(done)
列印了兩次done
二、執行緒之間共享的資料
2.如果多個執行緒引用了同乙個物件的例項,那麼這些執行緒會共享這些資料
class
program
}class
booldone
public
voidgo(
)}}
有乙個booldone類,有乙個布林型別的done,以及乙個go方法
go方法:當done為false的時候,done=true並且列印乙個done;
在main中建立這種型別的變數,然後呼叫thread執行緒執行go 方法,
然後主線程也呼叫go方法。
這時候只會列印乙個done。
即同乙個例項的變數在不同的執行緒間是共享的。
3.當變數為靜態變數的時候也會共用
class
program
public
static
voidgo(
)}}
有乙個靜態變數done。執行緒thread與主線程都呼叫go()方法,只列印乙個done
4.被lambda表示式或者匿名方法捕捉到的本地變數。
class
program};
newthread
(action)
.start()
;action()
;}
這裡相當於把done當成同乙個例項的變數,從而變成共用的資料。 小白的多執行緒修行之路1(共享變數與不共享變數)
本人,小白一枚,以下是我自己學習過程中所做的一些研究,如果有錯誤之處,還請指出來,我會及時改正,謝謝哈!自定義執行緒類中的變數與其他執行緒可以有共享與不共享之分 1 不共享資料的情況 如下例所示 通過執行緒池去建立三個執行緒,也可採用其他的形式,這裡所使用的是執行緒池去建立執行緒,每個執行緒都有自己...
共享與偽共享
共享就是乙個記憶體區域的資料被多個處理器訪問,偽共享就是不是真的共享。這裡的共享這個概念是基於邏輯層面的。實際上偽共享與共享在cache line 上實際都是共享的。cpu訪問的資料都是從cache line 中讀取的。如果cpu 在cache 中找不到需要的變數,則稱快取未命中。未命中時,需要通過...
Spark共享變數
預設情況下,如果在乙個運算元的函式中使用到了某個外部的變數,那麼這個變數的值會被拷貝到每個task中。此時每個task只能操作自己的那份變數副本。如果多個task想要共享某個變數,那麼這種方式是做不到的。spark為此提供了兩種共享變數,一種是broadcast variable 廣播變數 另一種是...