印刷された結果は です。これは、メソッド-20000000
を同期する必要がないことを証明しています。size()
しかし、私の理解では、私も同期する必要がありsize()
ます。ここの本当の状況は何ですか?
public class Test {
public static void main(String[] args){
Counter c = new Counter();
T1 t1 = new T1(c);
T1 t2 = new T1(c);
t1.start();
t2.start();
try{
t1.join();
t2.join();
} catch (Throwable t) {
}
System.out.println("c=" + c.size());
}
}
class T1 extends Thread{
private Counter c;
public T1(Counter c){
this.c = c;
}
public void run(){
for(int i=0; i<10000000; i++){
c.decrement();
}
}
}
class Counter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public int size() {
return c;
}
}