1,一个类里面的所有的synchronized的方法,当有多个线程对这些方法执行的话,首先要获得这个对象的锁,才能执行那个synchronized的方法。比如下面,t1执行methodOne()的时候,t2对这个对象要等待,直到t1执行完methodOne()放出这个对象的锁。然后t2才能执行methodTwo(),其间,t2一直被block.
2,wait(),notifyAll()/notify(),必须在同一个锁的内部执行。不然会有竞赛情形出现(见csdn合定本)
所以在一个类的内部分别出现this.wait(),this.notify()是可以的(都在一个对象锁下)。或者在一个synchronized(object)内部也可以。
public class MyClass{
public synchronized methodOne(){...}
public synchronized methodTwo(){...}
...
public Thread t1=new Thread(new Runnable(){
public void run(){
this.methodOne();
}
}
);
public Thread t2=new Thread(new Runnable(){
public void run(){
this.methodTwo();
}
}
);
}
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=453033