我正在尝试使用计数器来检测通过 HTTP 方法发送的文本中的唯一单词数。由于我需要确保该计数器的值的并发性,因此我已将其更改为 AtomicInteger
。
在某些情况下,我想获取计数器的当前值并将其重置为零。如果我理解正确的话,我绝对不能像这样单独使用 get()
和 set(0)
方法,而是使用 getAndUpdate() 方法,BUT!我不知道如何实现此重置的 IntUnaryOperator 以及是否可以在 Java 6 服务器上执行此操作。
谢谢。
public class Server {
static AtomicInteger counter = new AtomicInteger(0);
static class implements HttpHandler {
@Override
public void handle(HttpExchange spojeni) throws IOException {
counter.getAndUpdate(???);
}
}
}
最佳答案
getAndUpdate()
基本上适用于当您想要基于涉及前一个值的某些操作(例如,将值加倍)来设置值时。如果您想要更新的值始终为零,那么 getAndSet() 是更明显的选择。 getAndSet()
操作在 Java 6 中可用,因此可以在此处解决您的问题。
由于在 Java 8 之前没有可用的基于巴的原子更新操作,如果您想实现类似的操作,您要么需要处理自己的同步,要么使用 compareAndSet()
方法,可能会重试直到成功。
关于java - Java 6 上的 AtomicInteger getAndUpdate 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44184339/