【发布时间】:2014-10-07 20:52:52
【问题描述】:
public class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public synchronized int value() {
return c;
}
}
如果有两个线程,每个线程都有相同的 SynchronizedCounter 实例,这是否意味着如果一个线程调用增量,另一个线程不能调用减量。上面的代码是否等同于同步对象?即
public void run(){
synchronised( objectReferenceSynchronisedCounter){
if(conditionToIncrement)
objectReference....Counter.increment();
else
objectReference....Counter.decrement();
}
}
【问题讨论】:
-
不,因为
if部分在第一种情况下没有同步。 -
@njzk2 好的,所以也许我有两个可运行文件,一个递增,另一个递减。没有 if 语句。
-
您的代码不完整,但似乎预期的答案是:不,因为在第一个版本中,线程可以在方法调用之间被抢占(
increment,decrement),另一个可以执行@ 987654327@,因此在调用之间提供非零变化。 -
如果您的条件不依赖于对象的状态,或者更一般地说,如果您不将状态从一个调用拖到另一个调用,则代码不同但可能具有相同的结果.特别是如果你不是多线程的:)
标签: java synchronization