书上解释的很简单也很清楚,只是用起来会有一点问题。
synchronized method 的同步对象是指类实例对象,
synchronized static method 的同步对象指类本身,也就是所有对象共享这个同步对象。
问题出在
public int kk(){
g();
}
当在kk中调用g()时,到底使用了哪个对象?是使用了实例对象!无论你是用g()调用,还是even.g()调用,实例对象优先。
要使用类对象的话,你必须在even类外调用 Even.g()
class Generator{
private static int even =0;
Random r = new Random(1000);
Generator(){
}
public synchronized int f(){
even ++;
even ++;
return even;
}
public synchronized static int g() {
even ++;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
even ++;
return even;
}
public int kk(){
g();
}
}