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)

相关文章
|
存储 Java
ArrayList的初始化容量与扩容机制解析
ArrayList的初始化容量与扩容机制解析
|
Docker 容器
docker部署etcd集群及使用
docker部署etcd集群及使用
753 1
|
12月前
|
Java C# Python
线程等待(Thread Sleep)
线程等待是多线程编程中的一种同步机制,通过暂停当前线程的执行,让出CPU时间给其他线程。常用于需要程序暂停或等待其他线程完成操作的场景。不同语言中实现方式各异,如Java的`Thread.sleep(1000)`、C#的`Thread.Sleep(1000)`和Python的`time.sleep(1)`。使用时需注意避免死锁,并考虑其对程序响应性的影响。
279 8
|
9月前
|
分布式计算 并行计算 调度
基于HPC场景的集群任务调度系统LSF/SGE/Slurm/PBS
在HPC场景中,集群任务调度系统是资源管理和作业调度的核心工具。LSF、SGE、Slurm和PBS是主流调度系统。LSF适合大规模企业级集群,提供高可靠性和混合云支持;SGE为经典开源系统,适用于中小规模集群;Slurm成为HPC领域事实标准,支持多架构和容器化;PBS兼具商业和开源版本,擅长拓扑感知调度。选型建议:超大规模科研用Slurm,企业生产环境用LSF/PBS Pro,混合云需求选LSF/PBS Pro,传统小型集群用SGE/Slurm。当前趋势显示Slurm在TOP500系统中占比超60%,而商业系统在金融、制造等领域保持优势。
1539 32
|
存储 缓存 监控
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
|
12月前
|
自然语言处理 SEO
企业网站选择什么CMS系统更有利于SEO优化
企业网站选择什么CMS系统更有利于SEO优化
178 5
|
11月前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
213 8
|
存储 运维 监控
深入Linux核心:文件系统与日志解析
【8月更文挑战第20天】
258 2
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
410 0
|
JavaScript 数据库
浏览器打开html文件显示中文乱码解决方法
浏览器打开html文件显示中文乱码解决方法
1683 0
下一篇
开通oss服务