【发布时间】:2017-02-27 16:28:48
【问题描述】:
我的线程类有两个变量var1 和var2,可以从不同的线程访问。我们可以假设通过synchronized getter 和setter 使用var2 与不使用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 并不能替代同步?
-
二传手的主体背后的想法是什么?
return var2 = value;这是不正常的,所以需要知道你想在那里实现什么。 -
另外 var1 是一个非最终的公共布尔值,不确定上面是真实的代码还是只是为了演示一个例子,但这可能是个坏消息......
-
在这个例子中,没有区别。在其他示例中,存在很大差异。您需要阅读 Oracle 并发教程(特别是 docs.oracle.com/javase/tutorial/essential/concurrency/sync.html)以了解同步操作和原子操作之间的区别。
标签: java multithreading synchronized volatile