Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么 Thread 类的 sleep()和 yield ()方法是静态的?

为什么 Thread 类的 sleep()和 yield ()方法是静态的?

作者头像
用户1289394
发布于 2023-08-22 08:59:50
发布于 2023-08-22 08:59:50
34400
代码可运行
举报
文章被收录于专栏:Java学习网Java学习网
运行总次数:0
代码可运行

Java 编程语言中,Thread 类提供了多线程编程所需的方法和功能。其中包括 sleep() 和 yield() 两个方法,它们分别用于线程阻塞和切换。相比其他实例方法而言,这两个方法是静态的。下面将就这一问题进行解释。

1、sleep() 方法 sleep() 方法可以使一个正在执行的线程进入休眠状态指定的时间毫秒或纳秒等待异步任务任务完成。该方法的定义格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void sleep(long millis) throws InterruptedException
public static void sleep(long millis, int nanos) throws InterruptedException

注意到,这两个方法都是静态的。原因是:在创建和启动线程时已经创建了 Thread 对象,因此调用 sleep() 方法并不需要依赖于任何特定的线程对象,而只需要使用类名直接调用即可。

值得注意的是,sleep() 方法可能会抛出 InterruptedException 异常,因为在其休眠时,随时可能会有另一个线程中断当前线程。当发生这种情况时,sleep() 方法将立即抛出异常,并返回程序控制权。

2、yield() 方法 yield() 方法也是线程间的一种协作机制,它通知调用线程的调度程序,该线程已经准备好让出当前 CPU 资源,以便让其他一些正在等待的线程有机会运行。调用 yield() 方法后,该线程将从执行的线程状态转变成就绪的线程状态。

yield() 方法的定义格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static native void yield();

同样地,yield() 方法是一个静态方法,因为它并不依赖于任何特定的线程对象。相反,它通知操作系统让出当前线程的 CPU 时间片。

然而,值得注意的是,使用 yield() 方法不能保证使另一个略高一点优先级的线程获得CPU执行时间。但是,可使用 yield() 方法来避免长时间独占 CPU 资源并提高多任务协作的效率。此外,如果没有其他等待运行的线程,则该方法可能会被忽略,无法实现线程切换。

总之,sleep() 和 yield() 方法都是 Thread 类中实现多线程编程必须的方法,能够有效地实现线程的阻塞、切换和协作,从而提高多任务处理的效率和性能。同时,由于这两个方法不依赖任何特定线程对象,因此它们被定义为静态方法,可以直接使用类名进行调用处理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java编程进阶之路 12】线程调度的艺术:sleep与wait方法的深入探讨
在Java多线程编程中,sleep和wait方法对于线程的控制和管理起着至关重要的作用。本文将详细探讨这两个方法的工作原理、使用场景以及它们之间的差异,并通过实例代码来加深理解。
夏之以寒
2024/04/11
1.2K0
一张图搞清楚wait、sleep、join、yield四者区别,面试官直接被征服!
在线程的生命周期中,不同状态之间切换时,可以通过调用sleep()、wait()、join()、yield()等方法进行线程状态控制,针对这一部分知识点,面试官们也会做做文章,比如问你这些方法的作用以及之间的区别。
JavaBuild
2024/05/27
1.7K0
一张图搞清楚wait、sleep、join、yield四者区别,面试官直接被征服!
Java 多线程中wait、notify、nptifyAll、yield、join、sleep的使用方法及区别
在Java多线程编程中,会涉及到wait、notify、nptifyAll、yield、join、sleep线程间交互的方法,这些比较晦涩难懂,现在全面介绍下这些方法的使用方式。
夹胡碰
2020/12/22
1.1K0
Java 多线程中wait、notify、nptifyAll、yield、join、sleep的使用方法及区别
sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇(十四)
Object中的wait、notify、notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等待集逻辑
noteless
2019/03/11
1.8K0
sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇(十四)
Java的Thread 类中 yield 方法有什么作用?
Java中的Thread类是实现多线程编程的关键基础。在Java中,yield()方法是其中一个用于控制线性“执行/被执行”的指令之一。当调用yield()方法时,当前线程将放弃当前抢占到的CPU资源,并让其他具有相同优先级的线程运行。
用户1289394
2023/08/22
6550
Java的Thread 类中 yield 方法有什么作用?
并发编程1:全面认识 Thread
本文介绍了Java编程中线程的创建方式、启动方式、线程池的创建和线程池的使用,以及线程池的拒绝策略。同时,本文还介绍了线程的 run() 和 start() 方法的区别以及线程的中断和终止等知识点。
张拭心 shixinzhang
2018/01/05
7980
并发编程1:全面认识 Thread
万字长文,Thread 类源码解析!
金九银十,很多小伙伴都打算跳槽。而多线程是面试必问的,给大家分享下 Thread 源码解析,也算是我自己的笔记整理、思维复盘。学习的同时,顺便留下点什么~
JavaFish
2020/09/14
1.4K0
万字长文,Thread 类源码解析!
Thread.sleep() vs. 对象的wait():线程暂停的不同方式
多线程编程是现代软件开发中的常见需求,而线程的控制和协作则是其中的关键挑战之一。在Java中,有两种主要的方法可以用来让线程暂停执行:Thread类的sleep()方法和对象的wait()方法。本文将深入研究这两种方法,分析它们的区别,以及在不同情况下何时使用哪种方式来控制线程的执行。
疯狂的KK
2023/09/27
1.6K1
Thread.sleep() vs. 对象的wait():线程暂停的不同方式
【Java学习笔记之三十四】超详解Java多线程基础
前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧。 正文 线程与进程 1 线程:进程中负责程序执行的执行单元 线程本身依靠程序进行运行 线程是程序中的顺序控制流,只能使用分配给程序的资源和环境 2 进程:执行中的程序 一个进程至少包含一个线程 3 单线程:程序中只存在一个线程,实际上主方法就是一个主线程 4 多线程:在一个程序中运行多个任务 目的是更好地使用CPU资源 线程的实现 继承Thread类
Angel_Kitty
2018/04/09
9400
【Java学习笔记之三十四】超详解Java多线程基础
Java线程(四):线程中断、线程让步、线程睡眠、线程合并
该文介绍了Java多线程的底层原理、实现方式和注意事项,包括创建线程、线程同步、线程通信、线程池和线程让步等内容。同时,还介绍了线程的休眠、线程优先级和线程的同步问题。通过掌握这些知识,可以更加深入地理解Java多线程的原理和实际应用,提高在开发过程中的效率和质量。
高爽
2017/12/28
1.7K0
并发编程Thread的常用API有哪些?
在JDK17(或以上版本)中,Thread类提供了一组常用的API,用于管理线程的创建、启动、暂停、恢复和销毁等操作。本文从api、源码、编程示例等方面详细说明Thread常用函数的使用和注意事项。
codetrend
2024/03/08
2000
java 多线程学习
线程的生命周期 new thread(新建):创建一个线程实例, 比如通过 new 操作创建一个 Thread 类的实例, 此时线程未被启动 runnable(可运行):一个线程创建好之后, 需要通知 cpu 这个线程可以开始执行了, 比如 thread 类的 start() 方法执行后, 此时线程在就绪队列中等待 cpu 分配资源 running(运行中):线程获得 cpu 资源后开始运行, 比如运行 run() 方法中的逻辑, 此时除非线程自动放弃 cpu 资源或者有优先级更高的线程进入, 否则将执行到
用户1112962
2018/07/04
3020
线程篇2:[- sleep、wait、notify、join、yield -]
前言:线程的五种状态 本文是线程篇的一个分支,主要结合我的理解,看一下sleep和wait以及线程的一些状态 网上的图看起来都有点丑,我自己画了一幅: 1.New: 新建态: n
张风捷特烈
2020/04/30
4160
线程篇2:[- sleep、wait、notify、join、yield -]
Java多线程详解3
Java多线程详解 Java线程:线程的调度-休眠 Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。 这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。 线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。 线程休眠的方法是Thread.sleep(long millis)和Thread.sleep(l
Java帮帮
2018/03/15
7870
你真的了解 Thread 线程类吗?
在之前的文章中,我们简单的介绍了线程诞生的意义和基本概念,采用多线程的编程方式,能充分利用 CPU 资源,显著的提升程序的执行效率。
Java极客技术
2023/09/14
4540
你真的了解 Thread 线程类吗?
相关推荐
【Java编程进阶之路 12】线程调度的艺术:sleep与wait方法的深入探讨
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验