线程状态图

线程可以拥有自己的操作栈,程序计数器,局部变量表等资源,它与同一进程内的其他线程共享该进程的所有资源(所有的初始化的资源,因为局部变量表往往是副本/引用副本)。

线程状态有五种:New 新建,Runnable 就绪, Running 运行 ,Blocked 阻塞,dead 终止。

下面的线程状态图,有关于的阻塞态的切换需要改一下


Cache_-28eb610a3ed2f72d..jpg

New新建:即采用我们的Thread/Runnable/线程池/Callable创建出来的线程

Runnable 就绪:调用start之后运行之前的状态。

Running 运行:调用run时候的状态,表明线程正在执行。线程可能会因为某些因素而退出Running,如时间,异常,锁,调度

Blocked 阻塞:

  1. 等待阻塞:调用了Object.wait()(进入了对象锁的Waiting Set),需要用notify来唤醒(弃用)
  2. 同步阻塞/锁阻塞:锁被其它线程占用(参考monitor锁的锁池)
  3. 主动阻塞:调用Thread的某些方法,出让CPU执行权(比如sleep,join等),或者发出了I/O请求。

Dead 死亡:线程执行完或者因异常退出了run()方法,该线程结束生命周期。

join方法用于在某一个线程的执行过程中调用另一个线程执行,等到被调用的线程执行结束后,再继续执行当前线程,如:t.join//主要用于等待t线程执行结束,main线程阻塞,若无此句,main则会执行完毕,导致结果不可测。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 5,186评论 0 23
  • 转载:http://www.cnblogs.com/skywang12345/p/3479024.html 线程状...
    SinX竟然被占用了阅读 3,445评论 0 1
  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    小徐andorid阅读 2,878评论 3 53
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 3,018评论 1 18
  • 0 前言 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要...
    七寸知架构阅读 5,221评论 2 63