一、线程的状态(5种)

新建(NEW):新创建了一个线程对象。

可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。

运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。

阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种:

(一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。

(二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。

(三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

死亡(DEAD):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。

二、sleep()作用

让目前正在执行的线程休眠,让CPU去执行其他的任务。从线程状态来说,就是从执行状态变成限时阻塞状态。

三、wait()作用(必须先获得对应的锁才能调用)

让线程进入等待状态,释放当前线程持有的锁资源线程只有在notify 或者notifyAll方法调用后才会被唤醒,然后去争夺锁.

四、join()作用

线程之间协同方式,使用场景: 线程C必须等待线程B运行完毕后才可以执行,那么就可以在线程B的代码中加入thread_c.join()

五、yield()作用

让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会。因此,使用yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中

JAVA线程中的sleep()、wait()、yield()、join()作用相关推荐

  1. java 线程 获取消息_获取java线程中信息

    怎样获取java线程中信息? 在进行多线程编程中,比较重要也是比较困难的一个操作就是如何获取线程中的信息.大多数人会采取比较常见的一种方法就是将线程中要返回的结果存储在一个字段中,然后再提供一个获取方 ...

  2. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  3. Java线程中wait、await、sleep、yield、join用法总结

    文章目录 一.wait().notify().notifyAll()用法 二.await().signal().signalAll()用法 三 .yield().join()用法 四.wait().a ...

  4. java线程中yield()和join()的区别

    多线程在面试中是非常受欢饮的题目,我个人认为我们很少有机会能够真正的用到复杂的多线程(我在7年前使用过一次),熟悉这些概念能够增加你的信心,先前,我已经讨论了一个相似的问题,wait()和sleep( ...

  5. 【并发编程】线程中的Sleep、Yield、Join等api方法方法线程状态转换

    在上两篇中我们学习线程的概念和如何创建线程,在本篇中我们学习一些线程的方法和线程的状态. 方法 Sleep:线程睡眠 线程休眠指的是让线程暂缓执行以一下,等到了预计时间之后再恢复执行参数是毫秒.当线程 ...

  6. 模拟做饭系统(java+线程中的join方法)

    (一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+ ...

  7. java线程中join方法的简单讲解

    一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并发执行变为串行执行.具体看代码: public class Test {public static void main ...

  8. java线程中的常用方法_[多线程] 线程中的常用方法-最详细

    线程中常用的方法 1.public void start() 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 2.public void run() 如果该线程是使用独立的 Runna ...

  9. Java线程中,Blocked,Wait,以及TIMED_WAIT的区别

    根据jdk1.6的api,java的Thread类,定义了六个状态: 线程状态.线程可以处于下列状态之一: NEW 至今尚未启动的线程处于这种状态. RUNNABLE 正在 Java 虚拟机中执行的线 ...

  10. Java线程中的用户态和内核态

    内核态用户态是什么? 操作系统对程序的执行权限进行分级,分别为用户态和内核态.用户态相比内核态有较低的执行权限,很多操作是不被操作系统允许的,简单来说就是用户态只能访问内存,防止程序错误影响到其他程序 ...

最新文章

  1. 实验三 JSP应用开发进阶
  2. Android Studio 编译: Program type already present: XXX 解决方案
  3. VC++设置软件断点和“XXX已停止工作“对话框
  4. 性能测试——美团国内机票网站(Badboy、JMeter)
  5. Google 发布网页统计报告
  6. Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)
  7. 介绍一个轻量级iOS安全框架:SSKeyChain
  8. java9-1.类,抽象类,接口的综合小练习
  9. http缓存机制之304状态码
  10. [转载] Python学习:Python成员运算符和身份运算符
  11. hbase linux 命令,在linux下操作hbase
  12. 软件工程学习进度第三周暨暑期学习进度之第三周汇总
  13. 计算机与英语教学的论文开题报告,英语教学论文开题报告
  14. Java常用数据类和方法
  15. Tomcat 加载外部dll时如何配置
  16. 深蓝学院机器人学中的状态估计课程
  17. 蓝桥杯大赛(大学B组)—— 数字三角形 (C语言)
  18. python图片转手绘_python图片转素描软件
  19. 【01Studio MaixPy AI K210】1.LED
  20. 如何调用WxJump的API接口实现微信网址链接转二维码

热门文章

  1. Java-Poi导入导出excel工具类
  2. Azylee.Utils 工具组
  3. windows 大容量存储设备驱动异常(代码:39)U盘由于驱动问题无法用的解决方法
  4. 怎么查看电脑是不是禁ping_电脑ping怎么打开怎么检测网络连接是否正常 ping网络教程...
  5. 谈心-弱之胜强,柔之胜刚
  6. WPF UI工具Snoop的用法
  7. RabbitMQ 工作模式二
  8. 工作经验的Java学习心得
  9. #1829 : Tomb Raider(哈希)
  10. 中国第一大忽悠终于倒下了