1:一个对象只有一把锁;
2:wait(),notify()和notifyAll(),都是Object方法,这三个方法都需要和synchronized配合使用,也就是必须先获取对象的锁,才能调用者三个方法。
3:wait()造成当前线程等待,而不是只对象所在的线程等待;
4:无论是同步方法还是同步语句,只要声明为同步了,在同一时刻,同一个对象的同步XX是不可以被同时访问的,而不同对象之间的同步方法是互不干扰的。
5:自定义锁同步锁
public class PrintNum {
private byte[] lock = new byte[0]; //自定义锁对象,这样代价最小,也可已使用当前对象this
public void demo() {
PrintThread a = new PrintThread("a");
PrintThread b = new PrintThread("b");
a.start();
b.start();}
class PrintThread extends Thread {
public PrintThread(String name) {
this.setName(name);
}public void run() {
synchronized(lock) {
for(int i =0; i < 100; i++) {
if(i % 10 == 0 && 0 != i) {
try {
lock.wait(); //暂时释放资源
lock.notify(); //唤醒另外一个进程
} catch (InterruptedException e) {
e.printStackTrace();}}
System.out.println(this.getName()+": "+i);}}}}}