当前位置: 首页 > news >正文

java 线程唤醒于阻塞的常用方法

1.分类描述

  • 1.sleep() 休眠
  • 2.suspend() 暂停和 resume() 继续
  • 3.yield() 让步

就是我放弃本次执行,但继续排队,下一次有机会在执行。

  • 4.wait() 和 notify() notifyAll()

注:这两个方法,属于Object类,而不属于Thread类,wait()会先释放锁住的对象,然后再执行等待的动作。由于wait()所等待的对象必须先锁住,因此,它只能用在同步化程序段或者同步化方法内,否则,会抛出异常IllegalMonitorStateException.

两个方法搭配使用,wait()使线程进入阻塞状态,调用notify()时,线程进入可执行状态。wait()内可加或不加参数,加参数时是以毫秒为单位,当到了指定时间或调用notify()方法时,进入可执行状态。

  • 5.join()

也叫线程加入。是当前线程A调用另一个线程B的join()方法,当前线程转A入阻塞状态,直到线程B运行结束,线程A才由阻塞状态转为可执行状态。

这种方法的使用场景:比如我目前的处理无法继续了,需要另一个状态或者数据的支持,那么可以将支持的监听放到另一个线程中,满足条件,主线程继续,子线程结束。

2.规律总结:

线程就好比排队,你有排队和放弃排队的权力,但你没有立即执行的权力。

suspend和resume是最本质的线程控制方法,其他的方法都是依据这两个方法定制起来的。

  • 1.sleep(5000) 我现在suspend,5000后执行resume;
  • 2.yield()让步,我正办理登机呢,刚拍完照,发现忘记带一个东西了,这时候我让步,但是我取完东西后,会进行下一次排队。
  • 3.join 这里就叫”接合“吧,我把我的线程suspend,开启另一个线程,他执行完的时候,我在resume;

http://www.lryc.cn/news/60757.html

相关文章:

  • 面包多面包多面包多面包多面包多面包多
  • windows下Tomcat安装
  • 4月17号软件资讯更新合集.....
  • [java基础]面向对象(五)
  • React应用(基于React脚手架)
  • Redis(03)List--附有示例
  • openEuler-linux下部署zabbix-超级详细
  • nginx 简介 第四章
  • c++ float32 与 float16 互转
  • Redis问题
  • [API]ListList方法集合排序Lambda表达式(四)
  • 【ChatGPT】无需魔法打开即用的 AI 工具集锦
  • Choco-slover的使用
  • 亚马逊、ebay、temu如何提升产品点击率?测评自养号解析
  • 人工智能的前沿信息获取之使用谷歌学术搜索
  • PHP快速入门06-类型转换
  • Motion Planning学习笔记一:配置空间、图、图搜索、图遍历
  • C语言中如何判断大小端字节序?
  • 用spring-boot-starter实现事务的统一配置
  • C语言中fopen的详细用法
  • C语言——学生信息管理系统(数组)
  • 【C语言】基础语法1:变量和数据类型
  • linux安装和使用jekins
  • 驼峰式匹配
  • 第三十七章 立方体贴图总结
  • 哈希(C++)
  • Spring MVC 的调用(12)
  • 死磕内存篇 --- JAVA进程和linux内存间的大小关系
  • 信号完整性分析:关于传输线的三十个问题解答(三)
  • Java基础:Stream流常用方法