• Java多线程系列 基础篇01 线程的状态


    1.进程和线程

    进程:
    计算机中程序关于某数据集合的一次运行活动,是计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础。
    
    线程:
    线程是进程的实例,是CPU进行资源分配和调度的最小单位,线程是轻量级的进程。
    

    2.线程状态

    public enum State { NEW, RUNNABLE, BLOCKED,  WAITING, TIMED_WAITING, TERMINATED; }
    

    3.线程状态图

    4.状态说明

    1.NEW (新建)
    创建后未启动(未调用start()方法)的线程
    
    2.RUNNABLE (可运行)
    线程所需资源已经准备好了,此状态包含了os中线程的 Running和Ready两个状态(处于这两种某一个状态),当处于Ready状态时,等待cpu时间分片并使用调度器调度;当出于Rinning状态时,此线程已经正在运行了。
    
    3.BLOCKED (阻塞)
    线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
    (01) 等待阻塞:通过调用线程的wait()方法,当前线程会释放对象锁,线程进入等待状态,等到被其他线程唤醒时,未获得对象锁后进入阻塞状态。
    (02) 同步阻塞:线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。
    (03) 其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时 ,线程会进有限期等待状态,在等到sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,未获得对象锁后进入阻塞状态。
    
    3.WAITING(无限期等待)
    线程调用wait()或者join()后,线程进入无限期等待状态,一直无期限等待某些特殊事件的发生,如调用wait()方法的线程等待notify()/notifyAll();调用join()的线程等待目标线程结束。一旦等到期望的事件发生,则开始获取对象锁,获取失败进入阻塞状态,获取成功进入可运行状态。
    
    4.TIMED_WAITING(有限期等待)
    线程调用sleep(long)、wait(long)、join(long)后,线程进入有限期等待状态,一直等待期限结束,则开始获取对象锁,获取失败进入阻塞状态,获取成功进入可运行状态。
    
    5.TERMINATED(结束)
    线程结束执行。其实这只是Java语言级别的一种状态,在操作系统内部可能已经注销了相应的线程,或者将它复用给其他需要使用线程的请求,而在Java语言级别只是通过Java代码看到的线程状态而已。
  • 相关阅读:
    在CMD中使用for命令对单行字符串做分割的方法
    关于CMD/DOS中的短文件名规则
    [批处理]全盘搜索批量文件
    [批处理]批量提取MKV资源
    关于CMD中延迟环境变量嵌套的实现方法
    [批处理]自动按日期重命名文件名
    [批处理]手动伪造相机自动编号
    [批处理]简易命令行RAR
    [批处理]Oracle启动助手
    [批处理]强制删除文件及文件夹
  • 原文地址:https://www.cnblogs.com/lizhouwei/p/9059374.html
Copyright © 2020-2023  润新知