java join与yield方法

join()

join() 方法的主要作用是使当前线程(调用 join() 方法的线程)等待目标线程完成执行。当目标线程执行完毕后,当前线程才会继续执行。
在这里插入图片描述
代码示例:

public class JoinExample {
    public static void main(String[] args) {
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Thread 1 - " + i);
                try {
                    Thread.sleep(500); // 模拟一些工作
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Thread 2 - " + i);
                try {
                    Thread.sleep(500); // 模拟一些工作
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        thread1.start();
        thread2.start();

        try {
            thread1.join(); // 等待 thread1 结束
            thread2.join(); // 等待 thread2 结束
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Both threads have finished.");
    }
}

在这里插入图片描述

yield()

yield() 方法是 Java Thread 类的一部分,用于线程调度。调用 yield() 方法的线程会建议调度器将其执行资源让给其他同优先级的线程。如果没有其他同优先级的线程可运行,或者所有同优先级的线程都在等待,当前线程可能会继续运行。需要注意的是,yield() 是一个静态方法,调用时并不会释放持有的锁。
在这里插入图片描述
代码示例:

public class YieldExample {
    public static void main(String[] args) {
        Thread producer = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Producer: " + i);
                Thread.yield(); // 提示调度器让出 CPU
            }
        });

        Thread consumer = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Consumer: " + i);
                Thread.yield(); // 提示调度器让出 CPU
            }
        });

        producer.start();
        consumer.start();
    }
}

在这个示例中,两个线程 producer 和 consumer 交替打印信息。每次打印后,线程会调用 Thread.yield(),提示调度器当前线程愿意让出 CPU。实际效果取决于线程调度器的实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在数字化时代,自助BI是数据价值最大化的必经之路

引言&#xff1a;在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;仅仅拥有海量数据并不足以带来竞争优势&#xff0c;关键在于如何有效地分析并利用这些数据以指导决策、优化运营、提升客户体验&#xff0c;并最终实现业务的持续增长。在一章里笔者…

SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目

1&#xff0c;如何打包一个项目 通过IDEA自带的命令行&#xff0c;执行 ./gradlew clean build 2&#xff0c;检查生成的JAR文件 进入 build/libs 目录&#xff0c;你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3&#xff1a;运行生成的JAR文件 你可以使…

springboot服务启动读取不到application.yml中的nacos.config信息

我的版本&#xff1a; 可以添加bootstrap.yml文件&#xff0c;在里面添加nacos.config的配置信息 也可以添加VM参数 -Dspring.cloud.nacos.discovery.server-addr -Dspring.cloud.nacos.config.server-addr -Dspring.cloud.nacos.config.namespace -Dspring.cloud.nacos.discov…

图片管理新纪元:高效批量横向拼接图片,一键生成灰色艺术效果,打造专业视觉体验!

在数字时代&#xff0c;图片已成为我们生活和工作中不可或缺的一部分。但面对海量的图片&#xff0c;如何高效地进行批量管理、拼接和调色&#xff0c;成为许多人面临的难题。今天&#xff0c;我们为您带来了一款颠覆性的图片管理工具&#xff0c;让您轻松实现图片批量横向拼接…

设计模式探索:建造者模式

1. 什么是建造者模式 建造者模式 (Builder Pattern)&#xff0c;也被称为生成器模式&#xff0c;是一种创建型设计模式。 定义&#xff1a;将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 建造者模式要解决的问题&#xff1a; 建造者模…

前端面试题(CSS篇四)

一、CSS 优化、提高性能的方法有哪些&#xff1f; 加载性能&#xff1a; &#xff08;1&#xff09;css压缩&#xff1a;将写好的css进行打包压缩&#xff0c;可以减少很多的体积。 &#xff08;2&#xff09;css单一样式&#xff1a;当需要下边距和左边距的时候&#xff0c;很…

kafka中

Kafka RocketMQ概述 RabbitMQ概述 ActiveMQ概述 ZeroMQ概述 MQ对比选型 适用场景-从公司基础建设力量角度出发 适用场景-从业务场景出发 Kafka配置介绍 运行Kafka 安装ELAK 配置EFAK EFAK界面 KAFKA常用术语 Kafka常用指令 Kafka中消息读取 单播消息 group.id 相同 多播消息 g…

【VUE基础】VUE3第三节—核心语法之ref标签、props

ref标签 作用&#xff1a;用于注册模板引用。 用在普通DOM标签上&#xff0c;获取的是DOM节点。 用在组件标签上&#xff0c;获取的是组件实例对象。 用在普通DOM标签上&#xff1a; <template><div class"person"><h1 ref"title1">…

Vmware环境下ESXi主机 配置上行链路、虚拟交换机、端口组、VMkernel网卡

一、适用场景 1、使用专业服务器跑多种不同的业务&#xff0c;每种业务可能所需运行的server环境不同&#xff0c;有的需要Linux server CentOS7/8、kali、unbuntu……有的需要windows server2008、2003、2016、2019、2022…… 2、本例采用的是VMware ESXi6.7 update 3版本&am…

【硬件产品经理】硬件产品手板设计

目录 简介 硬件手板 手板资料 作者简介 简介 今天来聊聊产品手板这个话题。 到了手板这个层面其实就属于产品设计细节了&#xff0c; 无论你对整个开发体系如何如何了解&#xff0c; 对公司管理流程如何如何精通。 最终都是要回归到业务细节中去的&#xff0c; 你可能…

非参数检测3——单输入检测系统

输入数据 各个变量之间相互独立&#xff0c;其概率分布函数为&#xff0c;均值和方差分别为 单输入系统&#xff1a;w由确定性信号s和零均,方差为σ02高斯白噪声n组成 单输入系统的H认为是简单的&#xff0c;K认为是复杂的&#xff0c;其概率分布函数分别为 其联合概率密度函数…

Go语言--复合类型之map、结构体

map Go 语言中的 map(映射、字典)是一种内置的数据结构&#xff0c;它是一个无序的 key-value 对的集合&#xff0c;比如以身份证号作为唯一键来标识一个人的信息。 格式 map [keyType]valueType 在一个 map 里所有的键都是唯一的&#xff0c;而且必须是支持和!操作符的类型…

IT高手修炼手册(4)PowerShell命令

一、前言 PowerShell是一个功能强大的命令行界面和脚本环境&#xff0c;它允许用户管理Windows操作系统和应用程序。 二、文件和目录操作 Get-ChildItem&#xff1a;列出指定路径下的文件和文件夹。简写为ls或dir。 Copy-Item&#xff1a;复制文件和文件夹。简写为copy或cp。 M…

Docker-基础

一&#xff0c;Docker简介&#xff0c;功能特性与应用场景 1.1 Docker简介 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器…

备考AMC8和AMC10竞赛,吃透2000以来1850道真题和解析(持续)

距离2024年AMC10竞赛还有3个多月的时间&#xff0c;距离2025年AMC8竞赛还有6个多月的时间&#xff0c;那么&#xff0c;如何备考接下来的AMC8、AMC10竞赛呢&#xff1f; 做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。 通过做真题&#xff0c;可…

读人工智能全传05专家系统

1. 知识就是力量 1.1. 人工智能领域此前存在的问题是过度关注搜索和解决问题这种通用法则 1.2. “弱”方法缺少一个关键的要素&#xff0c;而这一要素才是在所有智能行为中起决定性作用的组成部分&#xff1a;知识 1.3. 一种基于知识的人工智能系统&#xff1a;专家系统开始…

14-33 剑和诗人7 - 大模型语言和 DBCopilot 方法实现数据民主化

长期以来&#xff0c;数据库一直是海量信息的守护者&#xff0c;但访问这些知识历来是只有拥有专业技术技能的人才能享有的特权。这造成了巨大的知识壁垒&#xff0c;阻碍了数据访问的民主化&#xff0c;并使许多个人和组织无法获得这些存储库中包含的见解。 数据民主化的主要…

vue事件参数

事件参数 事件参数可以获取event对象和通过事件传递数据 获取event对象 <template> <buttonclick"addCount">点击</button><p>count is: {{ count }}</p><p>{{ coutent_e }}</p> </template> <script>expor…

【初中数学选讲】绝对值的几何意义例题(20240503-01)

初中数学选讲&#xff1a;绝对值的几何意义例题&#xff08;20240503-01&#xff09; 1. 练习题目1.1 题目描述1.2 分析 2 答题2.1 定义2.2 分段讨论2.2.1 情况1&#xff1a; x x x点在 a a a点左侧&#xff08; x < a , m ∣ x − a ∣ x<a,\ \ m\left|x-a\right| x<…

flask缓存、信号的使用

【 一 】flask-ache ​ 它为 Flask 应用程序提供了缓存支持。缓存是 Web 应用程序中非常常见的做法&#xff0c;用于存储频繁访问但不太可能经常更改的数据&#xff0c;以减少对数据库或其他慢速存储系统的访问&#xff0c;从而提高应用程序的性能和响应速度。 ​ Flask-Cach…