java的AtomicBitSet实现

标准api不包含AtomicBitSet实现。 我可以在AtomicIntegerArray之上滚动自己,但也不愿意。

是否有人知道在与Apache 2兼容的许可下发布的现有实现? 我只需要基本操作来设置和检查位。

编辑:

代码对性能和内存都很重要,所以我想尽可能避免同步或每个标志的整数。

我会使用AtomicIntegerArray,我会使用每个整数32个标志,这将给你与BitSet相同的密度,但不需要锁定线程安全。

 public class AtomicBitSet { private final AtomicIntegerArray array; public AtomicBitSet(int length) { int intLength = (length + 31) >>> 5; // unsigned / 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; } } 

请查看http://www.javamex.com/tutorials/synchronization_concurrency_7_atomic_integer_long.shtml

不是完全使用BitSet,而是使用AtomicInteger。