gpt4 book ai didi

java - java的AtomicBitSet实现

转载 作者:IT老高 更新时间:2023-10-28 21:01:12 26 4
gpt4 key购买 nike

标准 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;
}
}

关于java - java的AtomicBitSet实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12424633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com