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)

相关文章
|
1月前
|
设计模式 Java 调度
多案例理解Object的wait,notify,notifyAll与Thread的sleep,yield,join等方法
多案例理解Object的wait,notify,notifyAll与Thread的sleep,yield,join等方法
43 1
|
3月前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用
Thread.sleep(0) 到底有什么用
24 1
|
9月前
sleep () 和 wait () 的区别
sleep () 和 wait () 的区别
42 0
|
10月前
Thread
Thread方法
32 0
|
10月前
|
Java 程序员
sleep 和 wait 的区别
Java 中,线程的 "sleep" 和 "wait" 方法区别
88 0
|
Java 调度 C++
你真的了解Thread.sleep(0)吗?以及Thread.sleep(1) vs Thread.sleep(0)
你真的了解Thread.sleep(0)吗?以及Thread.sleep(1) vs Thread.sleep(0)
|
Java Linux 调度
Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比
Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比
368 0
Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比
|
Java
sleep与wait区别
第一个区别是在对系统资源的占用上。 wait是Object类的一个函数(也就意味着所有对象都有这个函数),指线程处于进入等待状态,此时线程不占用任何资源,不增加时间限制。wait可以被notify和notifyAll函数唤醒(当然这两个同时也是Object的函数)。 而sleep则是Thread类的一个函数,指线程被调用时,占着CPU不工作。此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。
115 0