[英]Is Java BitSet thread safe for concurrent readonly operations
一個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
的引用。 但是,這會在每次讀取和寫入變量時插入一個內存屏障。
注意,相同的推理適用於所有非線程安全的“有效不變”的對象。 即具有可變狀態的對象,並且您不會對其進行突變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.