IllegalMonitorStateException 抛出一个异常
出现的原因:两个方法导致 wait notify 线程等待,唤醒单个线程
方法的使用,必须依赖对象锁,在没有锁的情况下,不允许使用等待与唤醒方法
wait notify 等待和唤醒功能,都是拥有锁的线程
使用的同步代码块用的锁是 Student 对象s ,无论生产线程还是消费线程,锁都是对象s
持有对象s这把锁上的等待和唤醒
多线程操作的方法中、等待wait和唤醒方法notify为什么没有出现在Thread类中
而出现在了Object类中?
保证线程数据安全,使用同步锁,锁对象是任意对象,方法等待与唤醒必须有锁的支持,
方法必须定义在Object类中,JAVA中的所有对象均以有此方法
线程操作方法中,sleep 和 wait 有什么区别
sleep方法是Thread类的静态方法
wait方法是Object类的非静态方法
sleep方法,到时间自己醒来,继续执行 ,
wait方法,等待其他线程唤醒后才执行 ,
sleep 不会释放锁
wait 释放锁,被唤醒后,从新获取锁,才执行 |
|