问题描述
是否可以在 Java 中实现我自己的 AtomicInteger
?
我在方法背后看到的:
public final int addAndGet(int delta) {
for (;;) {
int current = get();
int next = current + delta; // Only difference
if (compareAndSet(current,next))
return next;
}
}
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1; // Only difference
if (compareAndSet(current,next))
return next;
}
}
所以无论如何都需要使用 compareAndSet。这是:
public final boolean compareAndSet(int expectedValue,int newValue) {
return U.compareAndSetInt(this,VALUE,expectedValue,newValue);
}
哪里
private static final jdk.internal.misc.Unsafe U = jdk.internal.misc.Unsafe.getUnsafe()
;
所以所有的原子都使用 Unsafe(我不太清楚,并且非常怀疑工作中是否需要它),我猜它使用的是低级/cpu 指令
Compare and Swap
我的问题是:是否可以在 java 上编写原子,或者无论如何需要调用 Unsafe
并最终得到它?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)