java - java的AtomicBitSet实现

  显示原文与译文双语对照的内容
0 0

标准api不包含一个AtomicBitSet实现。 我想我能开始自己AtomicIntegerArray之上,但宁可不要太。

有没有人知道在一个许可下发行兼容现有实现Apache 2? 我只要求基本操作设置并检查位。

编辑:

代码既是性能和内存关键所以我想尽量避免使用同步或每个标志的整数。

时间:原作者:6个回答

0 0

我会使用AtomicIntegerArray我想用32每个整数标志这让你的密度一样BitSet但无需锁的线程安全。

public class AtomicBitSet {
    private final AtomicIntegerArray array;
    public AtomicBitSet(int length) {
        int intLength = (length + 31) / 32;
        array = new AtomicIntegerArray(intLength);
    }
    public void set(long n) {
        int bit = 1 << n;
        int idx = (int) (n >>> 5);
        while (true) {
            int num = array.get(idx);
            int num2 = num | bit;
            if (num == num2 || array.compareAndSet(idx, num, num2))
                return;
        }
    }
    public boolean get(long n) {
        int bit = 1 << n;
        int idx = (int) (n >>> 5);
        int num = array.get(idx);
        return (num & bit) != 0;
    }
}
原作者:
0 0
原作者:
...