1
我的應用程序中有多個線程同時訪問BitSet。 documentation說:Java BitSet對於併發只讀操作是安全的
一個BitSet不安全的多線程使用沒有外部同步。
它沒有說它是不是安全的閱讀或寫作。任何人都可以解釋。
我的應用程序中有多個線程同時訪問BitSet。 documentation說:Java BitSet對於併發只讀操作是安全的
一個BitSet不安全的多線程使用沒有外部同步。
它沒有說它是不是安全的閱讀或寫作。任何人都可以解釋。
如果在初始化BitSet
的最後一個操作與讀取它的操作之間存在「發生之前」關係,則BitSet
僅對只讀操作是安全的。
最簡單的方法是使用final
。例如:
public class BitsetHolder {
private final BitSet b;
public BitSetHolder() {
b = new BitSet();
// operations to initialize b.
}
public BitSet getBitSet() {
return b;
}
}
這足以確保BitSet
是「安全發佈」。
但是,如果您不這樣做,則不能保證讀取BitSet
的線程將看到完全初始化的狀態。
顯式同步的另一種替代方法是使用volatile
變量來保存對BitSet
的引用。但是,這會在每次讀取和寫入變量時插入內存屏障。
請注意,相同的推理適用於所有非線程安全的「有效不可變的」對象;即您不會變異的可變狀態的對象。