方法 | 所属对象 | 是否会释放锁 | 作用 |
---|---|---|---|
sleep | Thread | 不会释放锁 | 让线程进入睡眠(线程睡眠期间CPU不会再分配时间片给当前线程) |
yeild | Thread | 会释放锁 | 告诉CPU当前线程执行的差不多了,让出CPU时间片,回到可执行的状态(可能又回马上执行) |
wait notify/notifyAll | Object | 会释放锁 | 必须放在同步代码块中执行<br />进入线程等待池等待被唤醒(可能会马上就会被唤醒) |
1.为什么wait,notify/notifyAll被定义在对象内,而sleep被定义在线程内
因为wait,notify/notifyAll都是锁级别的操作,Java每一个对象都可以进行上锁。Java线程中没有可以供任何对象使用的锁和同步器,所以他们被定义在了对象内
2.调用Thread.wait会怎么样
此处Thread也是一个对象,线程执行退出时会自动执行notify,这样对我们的程序设计会有影响
网友评论