Thread.sleep(0) vs Thread.sleep(1) vs Thread.yield() vs Object.wait()

简介: Thread.sleep(0) vs Thread.sleep(1) vs Thread.yield() vs Object.wait()

🍊下面是 Thread.sleep(0)Thread.sleep(1)Thread.yield()Object.wait() 方法之间的一些区别:

Thread.sleep(0) 允许当前正在运行的线程从执行状态退出,但并不能保证立即执行其他线程。它只是将当前线程的执行时间片分配给其他线程,但并不保证立即执行。

Thread.sleep(long millis) 允许当前正在运行的线程从执行状态退出,并在指定的时间间隔后恢复执行。

Thread.yield() 允许当前正在运行的线程从执行状态退出,使当前线程从执行状态(运行状态)变为可执行态(就绪状态),但并不能保证立即执行其他线程。它只是将当前线程的执行时间片分配给其他线程,但并不保证立即执行。Thread.yield()方法并不是仅仅选择让步于同等或者更高优先级的线程。高优先级的线程也会让步与低优先级的线程。因此高优先级仅仅是线程获得的CPU时间片更多一些,相对执行到的机会更大,并不是一定先执行。

Object.wait() 允许当前正在运行的线程从执行状态退出,直到其他线程调用该对象的 notify() 或 notifyAll() 方法,或者超时为止。

这些方法都可以用于线程调度和同步。但是,它们之间有一些重要的区别,应根据具体情况选择使用。

🍊需要注意⚠️的点:

对于 Thread.sleep(0) 和 Thread.yield(),它们都是为了让出 CPU 时间片,但是它们的执行效果是不确定的。Thread.sleep(0) 可能会在下一次调度时才进行调度

Thread.sleep(0) 通常用于在轮询循环中释放 CPU 时间片。例如,假设你正在执行一个无限循环,每次循环中都需要执行一些计算。如果你在循环内部调用 Thread.sleep(0),则当前线程会在执行计算之后立即释放 CPU 时间片,以便其他线程可以运行。

在使用 Thread.sleep(0) 时,应该注意以下几点

它只是尽力让出 CPU,但并不能保证线程一定会让出 CPU。

它不能保证线程在挂起后立即恢复。

它不能保证线程在恢复后立即获得 CPU。

在大多数情况下,你不应该使用 Thread.sleep(0)。相反,应该使用其他方法,例如 Thread.yield() 或 Object.wait(),来保证线程让出 CPU。

如果你的程序只有一个线程,或者你希望当前线程能够尽可能快地执行完毕,那么使用 Thread.sleep(0) 将不会有任何作用。

你应该注意,使用 Thread.sleep(0) 来释放 CPU 时间片并不总是最佳方法。有时候,使用线程互斥或其他同步机制可能会更加有效。

关于Thread.sleep(0)、Thread.sleep(1)更多相关信息,参考此文章:

你真的了解Thread.sleep(0)吗?以及Thread.sleep(1) vs Thread.sleep(0)

相关文章
|
6月前
|
设计模式 Java 调度
多案例理解Object的wait,notify,notifyAll与Thread的sleep,yield,join等方法
多案例理解Object的wait,notify,notifyAll与Thread的sleep,yield,join等方法
84 1
|
4月前
|
Java C# Python
线程等待(Thread Sleep)
线程等待(Thread Sleep)
|
5月前
|
Java 编译器 UED
Thread.sleep()总结
Thread.sleep()总结
|
6月前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用
Thread.sleep(0) 到底有什么用
54 1
sleep () 和 wait () 的区别
sleep () 和 wait () 的区别
84 0
|
Java 程序员
sleep 和 wait 的区别
Java 中,线程的 "sleep" 和 "wait" 方法区别
125 0
|
Java 调度 C++
你真的了解Thread.sleep(0)吗?以及Thread.sleep(1) vs Thread.sleep(0)
你真的了解Thread.sleep(0)吗?以及Thread.sleep(1) vs Thread.sleep(0)
|
消息中间件 安全 Java
|
安全 Java 中间件
Thread.sleep(0)的作用
在源码中经常能看到sleep(0)的操作,今天来总结下sleep(0)的作用到底是啥
442 0