public class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public synchronized int value() {
return c;
}
}
如果有兩個線程,每個線程都有SynchronizedCounter實例,這是否意味着如果一個線程正在調用increment,另一個線程不能調用遞減。上面的代碼是否等同於一個同步對象?即同步所有方法的類將表現爲同步塊?
public void run(){
synchronised(objectReferenceSynchronisedCounter){
if(conditionToIncrement)
objectReference....Counter.increment();
else
objectReference....Counter.decrement();
}
}
不,因爲'if'部分在第一種情況下不同步。 – njzk2 2014-10-07 20:54:36
@ njzk2好的,也許我有兩個runnables,一個遞增,另一個遞減。沒有,如果聲明。 – Kraken 2014-10-07 20:56:01
另請參閱http://stackoverflow.com/questions/417285/equivalent-code-for-instance-method-synchronization-in-java – lexicore 2014-10-07 20:56:30