1.wait(),notify(),notifyAll()三个方法都是Object类的方法,并不是Thread类独有的方法,又由于所有的类都是Object类的
子类,故所有的类都继承了这三个方法。
2.wait(),notify(),notifyAll()三个方法都必须放在同步代码块(syncronized修饰)中使用,否则会报异常:
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
同时,
3.任何线程在执行同步代码块中的代码时,都必须时刻持有该object的锁,没有锁将寸步难行,也即一旦调用该对象的wait()
方法,此线程将失去该对象锁,陷入阻塞状态,只有被该对象调用notify()或者notifyAll()方法唤醒后,才会从阻塞中进入
锁等待池,直到抢到了该对象锁才能从阻塞处继续向下执行。
4.wait():线程在获取对象锁后,主动释放对象锁,同时本线程休眠,知道其他线程调用该对象的notify()或notifyAll()方法
唤醒当前休眠线程,才能继续获取对象锁,并继续执行下面的语句。需要注意的是,notify()调用后并不是马上释放锁,
而是在当前synchronized(obj){}语句块结束后,才会释放锁,然后jvm会在等待对象锁的线程中随机选取一个线程
把锁给他。
5.Thread.sleep(timemillies)和obj.wait()都能暂停当前线程,释放cpu控制权,区别在于obj.wait()在释放cpu
控制权的同时释放锁,而sleep()仅仅释放cpu控制权。