This question already has answers here:
Difference between volatile and synchronized in Java
(4个答案)
3年前关闭。
我有一个具有两个变量
(4个答案)
3年前关闭。
我有一个具有两个变量
var1
和var2
的线程类,可以从不同的线程访问它们。我们是否可以假设通过var2
getter和setter使用synchronized
就像使用volatile
var1
而没有它们一样?public class Processor extends Thread
{
public volatile boolean var1 = false
private boolean var2 = false
synchronized boolean getVar2 ()
{
return var2;
}
synchronized boolean setVar2 (boolean value)
{
return var2=value;
}
public void run()
{
...
}
}
最佳答案
在这种情况下,是的。因为这两个同步块都不读取和写入值。
假设我们想对值更改做出反应,这既需要读取当前值,又需要写入新值。为此,volatile
不适合:
synchronized void setVar(boolean value) {
if (var != value) {
var = value;
someOnChangeMethod();
}
}
关于java - 易变变量和同步的setter和getter ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40107553/