本帖最后由 zhousaowen 于 2011-10-6 12:29 编辑
一个线程能否进入已有线程的方法分几种情况:
1.其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。
synchronized使用地方及其使用的对象:
内部代码对象可以为this或者其他的对象:
public void code(){
Synchronized(this){}
}
在静态方法中的对象为字节码
public static synchroinized void code(){//xxxclass.class
}
在方法对象为this
public synchronized void code(){
} |