在面试线程知识时,这个问题基本上是必须的问题。 因此,有必要在此进行更详细的总结。
区别一体
首先,必须了解这两种方法来自根本不同的类,sleep来自Thread,而wait来自Object类。
sleep是Thread提供的静态方法,该方法出现在该线程中,该线程并不是“睡觉”
调用这个方法的线程睡觉。 例如,在a线程中线程b.sleep ),a线程睡觉。
区别2
最主要的区别在于,sleep方法没有释放“锁定”,而wait方法如果没有释放“锁定”,则会出现死锁。
sleep不释放系统资源; 当wait是线程交互时,如果线程a向同步对象x发出wait
调用线程必须进入线程等待池,其他线程必须调用notify/notifyAll将其唤醒,或者等待指定的时间
自动唤醒。
这里还需要理解的是,无论是sleep设定的时间到了,还是在wait后醒来,线程都是并行的
不是立即重新开始执行,而是触发“操作系统再次与CPU冲突”。
三个区别
使用范围不同(将此作为区别稍微强行了一点) ) )。
wit、notify/notifyAll必须在同步控制块、同步方法中使用。 sleep在任何地方都可以使用。
同步(x ) {
x.notify () )
//或wait () )
}
四个区别
在代码表示中,sleep必须捕获异常,而wait不需要捕获异常。