java多线程编程之线程状态的转换

 线程有哪几个状态

Thread.State定义了6种状态:

 

1、新建(NEW)

创建后尚未启动的线程处于此状态。

  
2、就绪状态(RUNNABLE)

线程对象创建后,其他线程调用了该对象的start() 方法。包括了操作系统线程状态的Running 和 Ready,也就是处于此状态的线程有可能正在执行,也有可能正在等待CPU给它分配执行时间

3、阻塞(BLOCKED )

阻塞状态在等待着获取一个排他锁。

4、无限期等待(WAITING)

处于这个状态的线程不会被分配CPU执行时间,它们要等待被其他线程显式唤醒。

执行以下动作会进入这种状态:

Object#wait()

Thread.join()

LockSupport#park()

然后会等其它线程执行一个特别的动作,比如:

  • 一个调用了某个对象的 Object.wait 方法的线程会等待另一个线程调用此对象的 Object.notify() 或 Object.notifyAll()。
  • 一个调用了 Thread.join 方法的线程会等待指定的线程结束。

5、限时等待(TIMED_WAITING)

不会被分配CPU执行时间,一段时间后由系统自动唤醒。

执行以下方法会进入这种状态:

Thread.sleep

Object.wait(long)

Thread.join(long)

LockSupport.parkNanos

LockSupport.parkUntil

6、终止(TERMINATED)

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

一个线程在给定时间点只能处于一种状态。这些状态是虚拟机状态,不反映任何操作系统线程状态。

java中的线程和操作系统中的线程分别存在于虚拟机和操作系统中,线程在创建时,其实是先创建一个java线程,等到本地存储、程序计数器、缓冲区等都分配好以后,JVM会调用操作系统的方法,创建一个与java线程绑定的原生线程。

线程的调度是由操作系统负责的。

当操作系统为线程分配好时间片以后,就会调用java线程的run方法执行线程。

当线程结束后,会释放java线程和原生线程所占用的资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员宝哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值