21xrx.com
2024-12-22 19:49:32 Sunday
登录
文章检索 我的文章 写文章
Java线程的五种状态及其转换
2023-06-16 10:31:13 深夜i     --     --
Java线程 状态转换 就绪 阻塞 死亡

Java线程作为程序执行的基本单元,具有多种状态。在不同的状态之间转换可以使程序更高效地使用CPU资源。本文将介绍Java线程的五种状态及其转换。

第一种状态:新建(New)

新建状态是线程对象被创建后的初始状态。此时线程没有被启动,不会占用CPU资源。新建状态的线程对象可以调用start()方法启动线程。

第二种状态:就绪(Runnable)

线程调用start()方法后,线程对象会进入就绪状态,表示该线程已经准备好运行,等待系统分配CPU资源。在就绪状态中,线程可能会被多个线程抢占CPU资源的竞争所影响。

第三种状态:运行(Running)

当线程获得CPU资源时,就会进入运行状态,开始执行线程的run()方法。在运行状态中,线程可能会被操作系统强制暂停,或者调用Thread类中的yield()方法主动让出CPU资源,使其他线程有更多运行机会。

第四种状态:阻塞(Blocking)

当线程因为等待某一事件发生而无法继续执行时,就进入阻塞状态。阻塞状态分为三种:等待阻塞、同步阻塞和其他阻塞。等待阻塞是由于调用wait()方法、join()方法或sleep()方法等待造成的,此时线程不会占用CPU资源。同步阻塞是由于获取锁失败或者调用了进入同步代码块的synchronized关键字而进入的状态,此时线程的CPU资源会被占用。其他阻塞是由于调用了线程的suspend()方法造成的。阻塞状态的线程会在某个条件满足后再次进入就绪状态。

第五种状态:死亡(Dead)

当线程的run()方法执行完毕或者调用了stop()方法时,线程将进入死亡状态,此时线程对象被销毁,不再占用任何系统资源。如果线程被强制停止或发生了未捕获的异常导致线程终止,线程同样会进入死亡状态。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复