gpt4 book ai didi

java - java中的可变标识符

转载 作者:搜寻专家 更新时间:2023-10-31 08:20:56 25 4
gpt4 key购买 nike

我不明白我读到的那几句话:

because accessing a volatile variable never holds a lock, it is not suitable for cases where we want to read-update-write as an atomic operation (unless we're prepared to "miss an update");

这是什么意思,我不能读取-更新-写入?

我什么时候想使用 volatile 而不是简单的 boolean 值。在 C# 中,我记得我可以使用一个简单的静态 boolean 值来控制线程何时启动和停止,但在 Java 中我需要使用标识符“volatile”:

> public class StoppableTask extends Thread {
private volatile boolean pleaseStop;

public void run() {
while (!pleaseStop) {
// do some stuff...
}
}

public void tellMeToStop() {
pleaseStop = true;
}
}

最佳答案

句子讲述了这个例子:

public class CounterClass {
private volatile int counter;

public int increment() {
return counter++;
}
}

虽然countervolatile修饰符,但不保证如果两个线程访问increment()方法,两个不同的整数将被退回。因为 counter++ 操作不是原子的。它是 get, increment, return。有可能两个线程同时调用increment(),第一个线程在get阶段,第二个线程在get 阶段,第一个线程处于 increment 阶段。

总结:volatile 不保证原子性或其他任何东西。它只是保证当您访问变量时,您不会收到旧的缓存值。但它不保证任何线程安全或原子性。

关于java - java中的可变标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7227471/

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