sleep与wait的区别
(1)sleep()是Thread类的静态本地方法,wait()是Object()类的成员本地方法
(2)sleep()可以在任何地方使用,wait()只能在同步方法或同步代码块中使用(因为wait会释放锁)
(3)sleep(long time)会休眠当前线程指定时间,释放CPU资源,不释放锁,休眠结束后自动苏醒继续执行;wait()会释放对象锁,休眠完成后进入运行状态,(不指定时间的话)需要当该对象被调动notify()或notifyAll()之后才能竞争获取对象锁,进入运行状态
(4)sleep不需要被唤醒(休眠之后退出阻塞),wait需要被唤醒(不指定时间需要被唤醒)
为什么wait要定义在Object中,而不定义在Thread中?
在同步代码块中,我们说需要一个对象锁来实现多线程的互斥效果,也就是说,java的锁是对象级别的,而不是线程级别的