线程生命周期和状态

浅浅的花香味﹌ 2022-10-22 13:51 343阅读 0赞

当线程被创建以后,它既不是已启动就进入执行状态,也不是一直处于执行状态。

java中定义线程一共有 6 种状态,新建(NEW)、运行状态(RUNNABLE,这里面包含了就绪状态) 、阻塞(BLOCKED)、等待(WAITING)、超时等待状态(TIMED_WAITING) 、终止(TERMINATED)

  1. public static enum State {
  2. NEW,
  3. RUNNABLE,
  4. BLOCKED,
  5. WAITING,
  6. TIMED_WAITING,
  7. TERMINATED;
  8. }
  • NEW:初始状态,线程被构建,但是还没有调用 start 方法
  • RUNNABLED:运行状态,JAVA 线程把操作系统中的就绪
    和运行两种状态统一称为“运行中”
  • BLOCKED:阻塞状态,表示线程进入等待状态,也就是线程
    因为某种原因放弃了 CPU 使用权,阻塞也分为几种情况
    ➢ 等待阻塞:运行的线程执行 wait 方法,jvm 会把当前
    线程放入到等待队列(这就是waiting状态)
    ➢ 同步阻塞:运行的线程在获取对象的同步锁时,若该同
    步锁被其他线程锁占用了,那么 jvm 会把当前的线程
    放入到锁池中
    ➢ 其他阻塞:运行的线程执行 Thread.sleep 或者 t.join 方
    法,或者发出了 I/O 请求时,JVM 会把当前线程设置
    为阻塞状态,当 sleep 结束、join 线程终止、io 处理完
    毕则线程恢复
  • WAITING 无限期等待另一个线程执行特定操作。这个状态下是指线程拥有了某个锁之后, 调用了他的wait方法, 等待其他线程/锁拥有者调用 notify / notifyAll 一遍该线程可以继续下一步操作, 这里要区分 BLOCKED 和 WATING 的区别, 一个是在临界点外面等待进入, 一个是在临界点里面wait等待别人notify, 线程调用了join方法 join了另外的线程的时候, 也会进入WAITING状态, 等待被他join的线程执行结束
  • TIME_WAITING:超时等待状态,超时以后自动返回
  • TERMINATED:终止状态,表示当前线程执行完毕

在这里插入图片描述

等待队列

调用obj的wait(), notify()方法前,必须获得obj锁,也就是必须写在synchronized(obj) 代码段内。
与等待队列相关的步骤和图

线程1获取对象A的锁,正在使用对象A。
线程1调用对象A的wait()方法。
线程1释放对象A的锁,并马上进入等待队列。
锁池里面的对象争抢对象A的锁。
线程5获得对象A的锁,进入synchronized块,使用对象A。
线程5调用对象A的notifyAll()方法,唤醒所有线程,所有线程进入同步队列。若线程5调用对象A的notify()方法,则唤醒一个线程,不知道会唤醒谁,被唤醒的那个线程进入同步队列。
notifyAll()方法所在synchronized结束,线程5释放对象A的锁。
同步队列的线程争抢对象锁,但线程1什么时候能抢到就不知道了。

同步队列状态

当前线程想调用对象A的同步方法时,发现对象A的锁被别的线程占有,此时当前线程进入同步队列。简言之,同步队列里面放的都是想争夺对象锁的线程。
当一个线程1被另外一个线程2唤醒时,1线程进入同步队列,去争夺对象锁。
同步队列是在同步的环境下才有的概念,一个对象对应一个同步队列。
线程等待时间到了或被notify/notifyAll唤醒后,会进入同步队列竞争锁,如果获得锁,进入RUNNABLE状态,否则进入BLOCKED状态等待获取锁。

https://blog.csdn.net/weixin\_40482816/article/details/110825755

https://blog.csdn.net/qq\_33996921/article/details/106357703

发表评论

表情:
评论列表 (有 0 条评论,343人围观)

还没有评论,来说两句吧...

相关阅读

    相关 11 线生命周期状态

    1.线程的生命周期(5种状态) 在线程的生命周期中,它会经过新建(New)、就绪(Running)、阻塞(Blocked)和死亡(Dead)五种状态。由于CPU在多条线

    相关 线生命周期状态

    自己学习时总结的线程的状态 第一步:      新建状态:使用new关键字新建线程,此时处于新建状态; 第二步:      就绪状态:当调用了该线程的start()