thread 的join方法

news2024/11/24 12:57:34

join方法的底层执行? 看如测试用例: -> 

两个红色的框分别说明了sleep方法前后test01的状态,这个不是重点,只是一个验证而已。

重要的是test02的状态,调用join方法后,test02变成了WAITING状态,为什么? 

    public final synchronized void join(long millis) throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;
 
        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }
 
        if (millis == 0) {
            while (isAlive()) {
                 //注意这里:join方法的底层还是调用了wait()
                wait(0);
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }

join方法加了锁,锁的是谁?test01,谁持有锁?test02,搞清楚这两个地方后,那么:

我们可以看出:是test02线程在调用 join() -> wait(), 所以test02会进入WAITING状态。直到test01执行完,自动调用Thread.exist()方法,在exist()方法中,test02会被唤醒。
 

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

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

相关文章

每日一题 92反转链表||

题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;…

冠达管理:股票成交量变小的含义?股价不涨是什么原因?

股票成交量是一个很重要的分析指标&#xff0c;遭到许多出资者的重视。那么股票成交量变小的意义&#xff1f;股价不涨是什么原因&#xff1f;冠达管理也为我们预备了相关内容&#xff0c;以供参考。 股票成交量变小的意义&#xff1f; 股票成交量是指在一定时间内&#xff0c…

2023 ChatGPT 3.5+4.0 + AI智能绘图-设计师专项源码 附安装教程

AI绘图专业设计 不得将程序用作任何违法违纪内容&#xff0c;不要让亲人两行泪 界面部分图解构&#xff1a; 前台show&#xff1a; 后台Show&#xff1a; 前端部署&#xff1a; 安装pm2管理器 点击设置 选择v16.19.1版本-切换版本 再新建一个网站 点击设置 添加反向代…

CSS变形与动画(一):transform变形 与 transition过渡动画 详解(用法 + 代码 + 例子 + 效果)

文章目录 变形与动画transform 变形translate 位移scale 缩放rotate 旋转skew 倾斜多种变形设置变形中心点 transition 过渡动画多种属性变化 变形与动画 transform 变形 包括&#xff1a;位移、旋转、缩放、倾斜。 下面的方法都是transform里的&#xff0c;记得加上。 展示效…

冠达管理:股票估值低为什么好于估值高?如何判断估值?

进行股票交易要掌握一些重要的相关常识&#xff0c;比如对股票估值状况的判别&#xff0c;假如出资者能清楚的得知买入的股票价格是否合适&#xff0c;那对于出资来说是大有益处的。但是&#xff0c;关于估值&#xff0c;会有估值低好于高一说&#xff0c;为什么估值低会好于估…

爬虫:Scrapy热门爬虫框架介绍

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3-5章&#xff0c;最短1个月就能全方位的完成Python的学习并进行实战开发&#xff0c;学完了定能成为大佬&#xff01;加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教…

ROS之rviz显示GNSS/INS运动轨迹

目录 一、显示自定义圆形轨迹 二、显示GNSS/INS轨迹 2.1代码show_path.cpp 2.2CMakeLists.txt 2.3显示效果 一、显示自定义圆形轨迹 参考&#xff1a;&#xff08;九&#xff09;ROS在rviz中实时显示轨迹&#xff08;nav_msgs/Path消息的使用&#xff09;_nav_msgs/path.…

Java:正则表达式案例:爬数据,重复数据替换,数据分割

使用正则表达式查找一段文本中的内容 需求:请把下面文本中的电话&#xff0c;邮箱&#xff0c;座机号码&#xff0c;热线都爬取出来。 String data "电话:1866668888&#xff0c;18699997777\n" "或者联系邮箱: boniuitcast.cn&#xff0c;\n" "座机…

使用 PostgreSQL 创建全文搜索引擎1

PostgreSQL 提供了必要的模块&#xff0c;可以组合和创建自己的全文搜索搜索引擎。让我们尝试一下。 这是系列文章的第 1 部分&#xff0c;将要在其中探索 PostgreSQL 中的全文搜索功能&#xff0c;并研究我们可以完成多少典型的搜索引擎功能。在第 2 部分中&#xff0c;我们将…

【Redis从头学-0】一张思维导图对Redis做出基本介绍

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…

[centos]设置主机名

1、设置 hostnamectl set-hostname 名字 2、查看是否生效 hostnamectl status 3、打开一个新链接就可以了

零代码编程:用ChatGPT批量删除Excel文件中的行

文件夹中有上百个Excel文件&#xff0c;每个文件中都有如下所示的两行&#xff0c;要进行批量删除。 在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个处理Excel文件内容的任务&#xff0c;具体步骤如下&#xff1a; 打开F盘的文件夹&#x…

16.1.2 Linux 的多用户多任务环境

在 Linux 下面执行一个指令时&#xff0c;系统会将相关的权限、属性、程序码与数据等均载入内存&#xff0c; 并给予这个单元一个程序识别码 &#xff08;PID&#xff09;&#xff0c;最终该指令可以进行的任务则与这个 PID 的权限有关。根据这个说明&#xff0c;我们就可以简单…

ESD培训和咨询的相关服务

ESD&#xff08;Electrostatic Discharge&#xff0c;静电放电&#xff09;是指在两个物体之间发生的电荷平衡或不平衡&#xff0c;导致静电能量的释放。静电放电可能会对敏感的电子设备、芯片和电子元件产生损坏&#xff0c;因此对于需要处理电子设备的行业来说&#xff0c;ES…

MSP432自主开发笔记6:定时器多通道捕获多条编码器线脉冲数

所用开发板&#xff1a;MSP432P401R 今日在此更新一下编码器测速的定时器捕获写法&#xff0c;之前学习时竟然忘记更新了~~ 本文讲如何用定时器的通道来 捕获编码器的脉冲信号数量&#xff0c;不提供速度路程的计算方式&#xff0c; 文章提供源码&#xff0c;测试工程下载&a…

手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】之实现任务阶段 5- bean 后置处理器

&#x1f600;前言 手动实现 Spring 底层机制【初始化 IOC容器依赖注入BeanPostProcessor 机制AOP】的第五篇具体实现了任务阶段 5- bean 后置处理器 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希…

ModaHub魔搭社区:从OpenAI实践看分工必要性,核心关注工作流相关的基础软件工具栈

从OpenAI实践看分工必要性,核心关注工作流相关的基础软件工具栈 参考海外OpenAI的率先尝试,工作流分工、点工具加持助力成功。一方面,OpenAI在《GPT-4 Technical Report》论文中[1]中披露了参与GPT 4开发的人员分工,共249人,角色分工明确,预训练、强化学习和对齐、部署等…

时间序列去趋势化和傅里叶变换

在计算傅里叶变换之前对信号去趋势是一种常见的做法&#xff0c;特别是在处理时间序列时。在这篇文章中&#xff0c;我将从数学和视觉上展示信号去趋势是如何影响傅里叶变换的。 这篇文章的目的是让介绍理解什么是常数和线性去趋势&#xff0c;为什么我们使用它们&#xff0c;…

CRM系统如何搭建?流程是什么样的?

CRM系统可以提高企业的销售效率和客户满意度&#xff0c;从而增加企业的收入和利润。但是&#xff0c;要想成功地上线CRM系统&#xff0c;需要经过一系列的步骤和流程&#xff0c;下面说说&#xff0c;企业如何上线CRM系统&#xff1f;CRM系统搭建流程。 1、需求分析 需求分析…

记一次物理机安装centos7遇到的问题

首先制作U盘镜像&#xff08;之前装windows的大白菜之类的就没用了&#xff09; 用的这个UltraISO制作U盘镜像 然后从U盘启动开始安装&#xff0c; 问题一 安装时报错 dracut-pre-udev[351]:modprobe :ERROR:could not insert ‘floppy’ dracut-pre-udev[351]:modprobe…