给网站做排名优化学什么好,ai网站,雅思培训班,wordpress分类信息sleep和wait有什么区别
sleep 方法和 wait 方法都是用来将线程进入阻塞状态的#xff0c;并且 sleep 和 wait 方法都可以响应 interrupt 中断#xff0c;也就是线程在休眠的过程中#xff0c;如果收到中断信号#xff0c;都可以进行响应并中断#xff0c;且都可以抛出 In… sleep和wait有什么区别
sleep 方法和 wait 方法都是用来将线程进入阻塞状态的并且 sleep 和 wait 方法都可以响应 interrupt 中断也就是线程在休眠的过程中如果收到中断信号都可以进行响应并中断且都可以抛出 InterruptedException 异常那 sleep 和 wait 有什么区别呢
区别一语法使用不同
wait 方法必须配合 synchronized 一起使用不然在运行时就会抛出 IllegalMonitorStateException 的异常如下代码所示 初看代码好像没啥问题编译器也没报错然而当我们运行以上程序时就会发生如下错误 而 sleep 可以单独使用无需配合 synchronized 一起使用。
区别二所属类不同
wait 方法属于 Object 类的方法而 sleep 属于 Thread 类的方法如下图所示 区别三唤醒方式不同
sleep 方法必须要传递一个超时时间的参数且过了超时时间之后线程会自动唤醒。而 wait 方法可以不传递任何参数不传递任何参数时表示永久休眠直到另一个线程调用了 notify 或 notifyAll 之后休眠的线程才能被唤醒。也就是说 sleep 方法具有主动唤醒功能而不传递任何参数的 wait 方法只能被动的被唤醒。
区别四释放锁资源不同
wait 方法会主动的释放锁而 sleep 方法则不会。接下来我们使用代码的方式来演示一下二者的区别。
sleep 不释放锁
接下来使用 sleep 是线程休眠 2s然后在另一个线程中尝试获取公共锁如果能够获取到锁则说明 sleep 在休眠时会释放锁反之则说明不会释放锁实现代码如下 以上代码的执行结果如下图所示 从上述结果可以看出在调用了 sleep 之后在主线程里尝试获取锁却没有成功只有 sleep 执行完之后释放了锁主线程才正常的得到了锁这说明 sleep 在休眠时并不会释放锁。
wait 释放锁
接下来使用同样的方式将 sleep 替换成 wait在线程休眠之后在另一个线程中尝试获取锁实现代码如下 以上代码的执行结果如下图所示 从上述结果可以看出当调用了 wait 之后主线程立马尝试获取锁成功了这就说明 wait 休眠时是释放锁的。
区别五线程进入状态不同
调用 sleep 方法线程会进入 TIMED_WAITING 有时限等待状态而调用无参数的 wait 方法线程会进入 WAITING 无时限等待状态。 代码演示 以上代码的执行结果如下 总结
sleep 和 wait 都可以让线程进入阻塞状态并且它们都可以响应 interrupt 中断但二者的区别主要体现在语法使用不同、所属类不同、唤醒方式不同、释放锁不同和线程进入的状态不同。 知识来源
【2023年面试】线程的sleep、wait、join、yield如何使用_哔哩哔哩_bilibili
面试突击25sleep和wait有什么区别 - 知乎