我正在從運行嵌套類的多個線程訪問私有字符串字段。Java:String對象的線程安全
我知道String對象是不可變的,所以傳遞String作爲參數應該總是安全的。但如何訪問完全相同的領域?我認爲它不是線程安全的?
我正在從運行嵌套類的多個線程訪問私有字符串字段。Java:String對象的線程安全
我知道String對象是不可變的,所以傳遞String作爲參數應該總是安全的。但如何訪問完全相同的領域?我認爲它不是線程安全的?
它仍然是線程安全的,因爲您只能訪問該字段。如果某個線程會嘗試修改字段(其狀態或更改整個對象引用),而其他線程同時獲取此變量的值,則問題將會發生。
通常情況下,需要創建一個實現Runnable
類,並通過必要的參數:
class MyTask implements Runnable {
private final String needThis;
public MyTask(String needThis) {
this.needThis = needThis;
}
@Override
public void run() {
//do your task using needThis variable here...
}
}
這可以適用於其他類型的參數,以及。此外,最好發送不可變類的對象引用(如String
)作爲線程的數據。
如果您只是在閱讀領域,它始終是線程安全的。 使字段最終確定,以便編譯器檢查您是否正在更改值?
private final String theField = "TheValue"
另一個好方法,但在我的情況下,字符串是動態設置的,所以我會用另一種方式。 – user3541377
好的,當然是。但我想以一種可能的未來調整不會破壞我的代碼的方式進行編碼:)。所以將String傳遞給Runnable的構造函數可能是更好的方法?! – user3541377
@ user3541377是的。 –
使用stringbuffer –