线程相关方法

news/2024/4/27 13:32:44/文章来源:https://blog.csdn.net/Laoddaaa/article/details/126657612

在这里插入图片描述

1. wait,notify,notifyAll

1.1wait原理

在这里插入图片描述

1.2用法

  • 阻塞阶段
    让线程暂时休息,等到时机成熟再唤醒继续运行。
    在对象执行wait方法的时候,线程必须拥有这个对象的monitor锁,然后释放锁,进入阻塞状态。

  • 唤醒阶段

    • 另一个线程调用这个对象的notify方法唤醒线程(选取一个)且刚好被唤醒的是这个线程;
    • 另一个线程调用这个对象的notifyAll方法;
    • 过了wait(long timeout)规定的超时时间,传入0就是永久等待;
    • 线程自身调用interrupt()
  • 遇到中断
    抛出异常,释放掉monitor。

1.3notify唤醒

  • notify方法只应该被拥有过该对象的monitor的线程调用
  • 一旦线程被唤醒,线程便会从“等待线程集合”中被移除。
  • 要等刚才执行notify的线程退出被synchronized修饰的代码并释放monitor后才能抢占monitor,抢到之后才能继续执行。

1.4 wait/notify/notifyAll的特点、性质

  • 必须先拥有monitor
  • notify只能唤醒其中一个
  • 属于Object类
  • 只会释放持有的调用wait的对象的锁。

1.5 常见面试题

  • 手写两个线程交替打印0-100的奇偶数:synchronized或者wait/notify实现。
  • 手写生产者消费者模式。
  • 为什么wait需要在同步代码块内使用
    没有同步:如果线程1在wait之前切换到另一个线程,另一个线程的notify和notifyAll都执行完了,再切回来执行wait,这样就会造成wait无法唤醒,造成永久等待 。

2. sleep

  • 作用:让线程只在预期的时间执行,其他时候不占用CPU资源。

  • 不释放锁:

    • 包括synchronized和lock
  • 中断会抛出InterruptedException并清除中断状态。

  • TimeUnit.SECONDS.sleep()更加优雅。会忽略负参,而不是报错;有更多的API可以调用,例如SECONDS而不是只有ms。

  • 面试题:

    • wait/notify、sleep异同(方法属于那个对象?线程状态怎么切换)
      相同
      - 阻塞
      - 响应中断
      不同
      - wait/notify在同步方法中使用
      - sleep不释放锁
      - sleep要指定时间
      - 所属类不同

join

作用:因为新的线程加入,所以要等它执行完再执行(主等子)。
用法:main等待thread1执行完毕。(底层调用的是wait方法)
三个线程abc,怎么保证b在a后运行,c在b后运行(join)

  • 中断
    实际上是主线程阻塞时被中断。

  • 在join期间,主线程是什么状态:Waiting

yield

作用:释放线程的时间片,还是Runnable状态。
定位:JVM不保证遵循
yield和sleep区别:是否随时可能再次被调度

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

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

相关文章

如何让 ABAP 报表在后台作业的模式下运行

本教程迄今为止我们介绍的各种 ABAP 程序的编写,都是在事物码 SE38 或者 SE80 里完成之后,直接点击工具栏的执行按钮,或者使用 F8 快捷键来执行的: 以这种方式启动的 ABAP 程序,是以在线方式(online)运行的,有时也称 联机 模式。 也就是说,如果在执行 ABAP 程序的过程中…

利用 SSH 完成 Git 与 GitHub 的绑定

如上图所示,进入Settings页面后,再点击SSH and GPG Keys进入此子界面,然后点击New SSH key按钮:在「史上最简单的 GitHub 教程」中,我们已经对 GitHub 有了一定的了解,包括创建仓库、拉分支,或者通过Clone or download克隆或者下载代码;我们也下载并安装了 Git,也了解…

Java开发五年跳槽涨薪从12K到35K,靠“狂刷”九遍面试题

朋友做Java开发三年多的时间了,在老东家勤勤恳恳工作了三年多,工资也就是从刚开始的8K涨到了12K,天天给我吐槽他的工资低。2020年年初开始就一直在各种地方找资源,刷面试题,想要“骑驴找马”,恰恰又是在疫情…

jupyter 基本用法

前一段时间,同事帮我在超算服务器安装了一套 jupyter notebook 软件,甚是好用。但用了几天后,忽然就不能用了。今天研究了一下,发现是服务器程序关闭了,所以我在浏览器端的网页就打不开了。今天仔细研究了一下&#xf…

Unity入门01——unity界面基础

1.工程文件夹 1.Assets:工程资源文件夹((美术资源,脚本等等) 2.Library:库文件夹(Unity自动生成管理) 3.Logs:日志文件夹,记录特殊信息(Unity自动生成管理) 4.obj:编译产生中间文件(Unity自动生…

【05】Yarn

125_尚硅谷_Hadoop_Yarn_课程介绍 126_尚硅谷_Hadoop_Yarn_基础架构 整个集群资源的老大:ResourceManager 单个结点资源的老大:NodeManager 每一个作业任务的老大:ApplicationMaster 相应的容器(相当于一个小电脑)&…

DolphinScheduler实例表备份、清理

😋DolphinScheduler实例表备份、清理 👊一、前言 DolphinScheduler至今已经在项目中使用了将近一年,工作流实例和任务流实例都积累了百万级的数据量。在查看工作流实例和任务实例的时候,都要等待后台去查询数据库,感觉…

【电商项目实战】拦截器(详细篇)

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉SpringBoot电商项目实战 ✨学习社区: 👉不会压弯的小飞侠 ✨知足上进&#x…

Python tkinter 制作一个经典的登录界面和点击事件

前言Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk”;从本质上来说,它是对 TCL/TK 工具包的一种 Python 接口封装。Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行…

怎样在LaTeX中方便输入带圆圈的数字

这个也是这两天修改别人论文的时候得到的经验。正如这里所说:latex 如何添加圆圈数字?_Tsingke的博客-CSDN博客 如果使用\textcircled,数字编号大的时候,数字会跑到圆圈外面。但是上面这篇博客的解决方案太复杂了,就像…

电子数据取证-流程与技术

推荐公众号:安全猎人 专注于全栈攻防,学习笔记等; 原文url:https://mp.weixin.qq.com/s/hwpBcp-55ycXnSdObEffGg 电子数据取证流程与技术 根据某大佬经验,汇总出一系列取证流程、理论和模型; 在模型中&am…

pacman 升级软件包提示 “failed to commit transaction (invalid or corrupted package)“

很久没打开 WSL 2 里面的 Arch Linux, 想着更新一下软件包, 执行 pacman -Syu, 遇到 “signature is marginal trust” “failed to commit transaction (invalid or corrupted package)” 等错误. 观察输出的信息, 似乎提到了 “签名” “信任” 的问题 (signature … is marg…

快鲸智慧楼宇:助力商业地产快速实现数字化转型升级

作为国内领先的商业地产运营管理数字化服务商,快鲸搭建了集资产管理、合同管理、租客管理、财务管理、招商管理、物业管理等一套完整的 “商办招商营销管理空间资产运营管理租客运营服务体系”,致力于打造全场景商办地产标准化运营管理平台。 该平台具备…

C++之二叉树进阶|搜索树|key/value模型

🐧主页详情:Choice~的个人主页 📢作者简介:🏅物联网领域创作者🏅 and 🏅阿里专家博主🏅 and 🏅华为云享专家🏅 ✍️人生格言:最慢的步伐不是跬步&…

线程与进程的关联

上篇博客 我们说了进程 下面我来用一个我们回忆一下 其实啊 进程在频繁的创建 / 销毁的时候 是非常低效的 -因为创建的时候 要给进程分配资源(内存/文件) 赋值到CPU上 是一个大活 所以 有了线程 那咱们已经很了解进程了 直接说 线程 与 进程 的区别: 对比进程线程1包含线程2…

微服务项目:尚融宝(14)(前端平台:尚融宝管理系统路由配置)

认清现实&#xff0c;放弃幻想&#xff0c;准备斗争 一、组件定义 1、创建vue组件 在src/views文件夹下创建以下文件夹和文件 2、core/integral-grade/list.vue <template><div class"app-container">积分等级列表</div> </template> 3、…

文章组合生成-免费文章组合生成软件

文章组合生成软件&#xff0c;今天给大家分享一款免费的文章组合工具&#xff0c;自动从组文章生成段落目录详细参考图片。 网络的速度让一切的信息都是尽可能快的传达&#xff0c;为了给用户供给新鲜的信息&#xff0c;搜索引擎也是不断的增加抓取内容的频率&#xff0c;但是蜘…

设计模式-概述. 类图.软件设计原则详细讲解

1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1990年软件工程界开始研讨设计模式的话题&#xff0c;后来召开了多次关于设计模式的研讨会。直到1995 年&#xff0c;艾瑞克伽马&#xff08;ErichGamm…

kafka原理解读

一、Kafka Kafka是一个分布式的消息系统。 二、解决问题 消息系统通常被应用于异步处理、应用解耦、流量削峰、消息通信等场景。 异步处理 生产者将消息写入消息队列中&#xff0c;消费者异步拉取消息队列消息&#xff0c;从而提升消息处理能力。 应用解耦 Kafka作为消息传递…

【Linux操作系统】-- 多线程(三)-- 线程池+单例模式+读写者模型

目录 线程池 场景 代码实现 线程安全的单例模式 懒汉实现方式和懒汉实现方式 饿汉方式实现单例模式 懒汉方式实现单例模式 实战代码演练单例模式 读者写者模型 解释 基本操作 创建/销毁读写锁 读者锁和写者锁 解锁 伪代码理解读写锁 优先级 挂起等待锁vs自旋锁…