簡體   English   中英

Java BitSet線程對於並發只讀操作是否安全?

[英]Is Java BitSet thread safe for concurrent readonly operations

我的應用程序中有多個線程可以同時訪問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的引用。 但是,這會在每次讀取和寫入變量時插入一個內存屏障。


注意,相同的推理適用於所有非線程安全的“有效不變”的對象。 即具有可變狀態的對象,並且您不會對其進行突變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM