Java yield()方法在多线程编程中的应用

目录

背景:

代码解释:

1.类定义

2.主方法(main)

3.自定义线程类(MyThread3)

总结:


背景:

在Java中,多线程是构建并发应用程序的关键技术。当我们多个线程需要同时执行时,操作系统必须决定何时为每个线程分配 CPU时。这个过程被称为线程调度,而Java提供一个yield()方法,它允许一个线程主动放弃当前占用的CPU资源,使得其他线程有机会获得执行。

代码解释:

1.类定义

public class TestYield { ... }  
class MyThread3 extends Thread { ... }

·TestYield类是主类,包含main方法,作为程序的入口点。

·MyThread3类是自定义的线程类,它继承了Java的Thread类

2.主方法(main)

public static void main(String[] args) {      MyThread3 t1 = new MyThread3("t1");      MyThread3 t2 = new MyThread3("t2");      t1.start();      t2.start();      
}

·在main方法中,我们创建了两个MyThread3类型的线程对象t1和t2

·使用new关键字和构造器为它们分配内存,并传入字符串参数作为线程的名称 

 ·调用start()方法启动线程 。注意,不是直接调用run()方法,因为start()会由JVM来调用run(),同时启动一个新的线程来执行run()方法

3.自定义线程类(MyThread3)

class MyThread3 extends Thread {      MyThread3(String s) {      super(s);      }      public void run() {      for (int i = 1; i <= 100; i++) {      System.out.println(getName() + ": " + i);      if (i % 10 == 0) {     Thread.yield();      }      }      }      
}

·MyThread3类继承了Thread类,因此它拥有Thread类的所有属性和方法

·构造器MyThread3(String s)接收一个字符串参数,并通过suprer(s)调用父类Thread的构造器来设置线程的名称

·run()方法是线程的主要逻辑,在这个例子中,我们有一个循环,从1迭代到100,在每次迭代中,我们打印出当前线程额名称和当前的迭代次数

·当迭代次数i是10的倍数时,我们调用Thread.yield()方法。这是告诉JVM,当前线程原因放弃CPU资源,以便其他线程可以得到执行的机会,但请注意,yield()只是一个建议,JVM可以选择忽略它

总结:

Java yield() 方法的表格总结:

属性/特点描述
方法名yield()
所属类java.lang.Thread
访问修饰符static
参数
返回值void(无返回值)
作用暂停当前正在执行的线程,以允许其他具有相同优先级的线程执行
线程状态变化从运行状态(Running)转为就绪状态(Ready)
释放锁否(不会释放锁)
阻塞线程否(不会阻塞线程)
调度器响应向线程调度器提出建议,但调度器不一定会立即响应
线程优先级仅影响同优先级或更高优先级的线程
示例用途在循环中或当线程不需要立即执行时使用,以改善线程调度
注意事项yield() 不保证当前线程会立即停止执行,也不保证其他线程会立即开始执行

虽然yield()并不能保证特定的线程执行顺序,但在多线程编程中,理解和正确使用yield()方法可以帮助我们更好地管理线程的执行,提升程序的并发性和响应性。然而,需要注意的是,过度使用yield()方法可能会导致线程切换过于频繁,进而引发性能问题。因此,在编写多线程程序时,我们应当根据具体的需求和场景,谨慎选择同步和协作机制,以达到最佳的并发性能和响应性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php中interface接口类,abstract抽象类和trait详解

在PHP中&#xff0c;interface&#xff08;接口&#xff09;、abstract class&#xff08;抽象类&#xff09;和trait都是为了实现代码的复用、提高可维护性和灵活性而设计的。它们各自有不同的用途和特点&#xff1a; Interface&#xff08;接口&#xff09; 用途&#xff1…

上海市计算机学会竞赛平台2023年7月月赛丙组模糊匹配(二)

题目描述 有两个仅包含大写英文字母的字符串 &#x1d446;,&#x1d447;S,T&#xff0c;且字符串 &#x1d447;T 是 &#x1d446;S 的一个子串。 但由于字符串 &#x1d446;S 字迹模糊不清&#xff0c;其某些位置上的字符没有办法进行辨认&#xff0c;这些模糊的位置&am…

星戈瑞DSPE-FITC细胞成像:一种细胞可视化技术

细胞成像技术是现代生物医学研究中的工具&#xff0c;它为我们提供了一种直观、深入地了解细胞结构和功能的方法。其中&#xff0c;DSPE-FITC作为一种荧光标记分子&#xff0c;在细胞成像领域展现出了优势。 DSPE-FITC细胞成像的原理 DSPE-FITC是由磷脂酰丝氨酸&#xff08;DS…

【openmpi】怎样使用openmpi并行运行python脚本?

创作日志&#xff1a; 装过一次openmpi&#xff0c;但是半年之后就忘记怎么用了&#xff0c;所以记录一下 1. 测试openmpi是否安装好 cd /home/xxxx/SnapHiC_Call_Loop/openmpi-4.1.6/examples make mpirun -np 4 hello_c得到如下输出就说明是装好的了 2. 没有导入路径的话导…

rtthread stm32h743的使用(十)i2c设备使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.打开cubemux&#xff0c;设置外部时钟及串口外设…

劳务工程元宇宙:未来建筑行业的新趋势

随着科技的不断发展&#xff0c;虚拟现实、增强现实、区块链等技术逐渐渗透到各个行业&#xff0c;为传统产业带来了革命性的变革。在建筑行业&#xff0c;劳务工程元宇宙的概念应运而生&#xff0c;预示着未来建筑行业的新趋势。 一、劳务工程元宇宙的定义 劳务工程元宇宙是…

制造业采购堡垒机的四大必要性看这里!

制造业包括的行业广泛&#xff0c;与大家的生活息息相关&#xff0c;例如食品制造业、汽车制造业、纺织业、服装制造业等等。但大家对于制造业不是很了解&#xff0c;不知道制造业也是需要采购堡垒机的&#xff0c;今天我们就来聊聊制造业采购堡垒机的必要性。 制造业采购堡垒机…

python selenium 下载

查看浏览器版本 下载地址&#xff1a; 新版本下载地址 https://googlechromelabs.github.io/chrome-for-testing/ 历史版本也可以用这个下载地址 http://chromedriver.storage.googleapis.com/index.html 找到对应的版本 126.0.xxx 下载

推荐给中小学生的暑假打字神器

暑假是孩子们放松身心、增长知识的好时机。在这个漫长的假期里&#xff0c;家长们不仅希望孩子能够快乐地度过每一天&#xff0c;还希望他们能在学习上有所进步。尤其是随着科技的发展&#xff0c;熟练的打字技巧已经成为现代学习和工作的基本技能之一。今天&#xff0c;我要向…

节流工具,避免操作太频繁

ThrottleUtil 用于保证某个操作在一定时间内只执行一次的工具。 package com.cashpro.kash.lending.loan.utils;/*** <pre>* Created by zhuguohui* Date: 2024/6/26* Time: 13:43* Desc:用于节流执行任务,限制任务执行的频次* </pre>*/import android.os.Handle…

基于requests模块爬取网易云歌曲评论并制作热词云图

本实践大作业要求 本次实践大作业主要要求主要包括&#xff1a; 1、选择一个热点或者你感兴趣的主题作为本次爬虫实践作业要完成的任务。 2、为了完成本次任务&#xff0c;需要确定从网上爬取的数据对象与范围。 3、利用python及网络爬虫相关技术实现从网上爬取相应内容数据。 …

《ai企业级知识库》- 使用api启动rasa热切换模型文件

阿丹&#xff1a; 在线上环境在准备切换模型文件的时候&#xff0c;更希望通过一些简单&#xff0c;并且热点的方式来将训练好的模型文件进行切换。rasa这里准备了相应的接口来完成这个事情。那么这里就记录一下这接口。关于后面的部署是很重要的事情。 api模式 Rasa的API模式…

nvm-desktop window安装,支持动态切换nodejs版本

一、安装 nvm-desktop 概述 1 、卸载干净笔记的nodejs 和nodejs的环境变量 2、安装 nvm-desktop 软件 3、配置环境变量 4、测试功能 # 此时已安装完成 其他&#xff1a;常见nodejs的问题解决参考&#xff1a;官网 mac 安装教程 https://github.com/1111mp/nvm-desktop/blob/…

【揭秘新潮流】实践教学新宠SmartEDA,让电子设计课“潮“起来!

在信息时代的浪潮下&#xff0c;电子设计课程早已不再是枯燥乏味的代名词。随着技术的飞速发展&#xff0c;一种名为SmartEDA的实践教学新选择正逐渐崭露头角&#xff0c;为电子设计课程注入了前所未有的活力与趣味性。今天&#xff0c;就让我们一起走进SmartEDA的世界&#xf…

二维数组广度优先遍历-腐烂的苹果

一、问题描述 二、解题思路 此问题通过广度优先遍历来解决&#xff0c;模拟苹果发霉变坏的过程 1.初始时遍历网格&#xff0c;借助队列来储存所有发霉的苹果&#xff0c;统计好苹果个数 2.每一分钟队列内发霉苹果都会对周围的苹果起作用&#xff08;向外部扩散&#xff09;&am…

java:aocache的单实例缓存

上一篇博客《java:aocache:基于aspectJ实现的方法缓存工具》介绍了aocache的基本使用&#xff0c; 介绍AoCacheable注解时说过&#xff0c;AoCacheable可以定义在构造方法上&#xff0c;定义在构造方法&#xff0c;该构建方法就成了单实例模式。 也就是说&#xff0c;只要构建…

照片变漫画怎么弄?这5个照片变漫画方法超简单

在艺术和社交融合的现在&#xff0c;将照片转换为漫画风格已经成为一种流行趋势。 无论是为了创造个性化的头像&#xff0c;还是制作有趣的社交媒体帖子&#xff0c;拥有一款能够将照片转换为漫画的软件将极大地丰富你的创意表达。 下面&#xff0c;本文将介绍几款能够实现这…

Day34:LeedCode 56. 合并区间 738.单调递增的数字 968.监控二叉树

56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;int…

数学建模 —— MATLAB中的矩阵(上)

目录 矩阵的创建方法 (1)直接输入法 (2)函数创建法 (3)导入本地文件中的数据 矩阵元素的引用 矩阵元素的修改和删除 矩阵的创建方法 在MATLAB中&#xff0c;矩阵的创建方法主要有三种&#xff0c;分别是&#xff1a;直接输入法、函数创建法和导入本地文件中的数据。 (1)直…

R语言正则表达式

在 R 语言中&#xff0c;正则表达式&#xff08;regex&#xff09;可以用于文本匹配、查找、替换和拆分操作。R 中的正则表达式操作主要使用以下几个函数&#xff1a; grep(): 查找匹配的模式grepl(): 判断是否存在匹配的模式sub(): 替换第一个匹配的模式gsub(): 替换所有匹配…