每次在非最终类字段上同步时都会显示警告.这是代码:
public class X
{
private Object o;
public void setO(Object o)
{
this.o = o;
}
public void x()
{
synchronized (o) // synchronization on a non-final field
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我用以下方式改变了编码
public class X
{
private final Object o;
public X()
{
o = new Object();
}
public void x()
{
synchronized (o)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定上面的代码是在非final类字段上同步的正确方法.如何同步非最终字段?
private double value;
public synchronized void setValue(double value) {
this.value = value;
}
public double getValue() {
return this.value;
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,让getter同步有什么意义吗?
可能是一个非常愚蠢的问题.只想证实我的理解.
class Test
{
private volatile String id;
public void setID(String id)
{
this.id = id;
}
public String getID()
{
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
让我们说多个线程可以访问上面的类的对象.我的理解是,如果像上面那样简单的getter和setter(做简单的初始化),我不需要让这些方法同步,对吗?
我想volatile是必需的,否则id的值可能会在不同的线程中过时.
那么,如果我们没有这些方法同步,任何人都可以看到任何问题吗?