线程的状态学习

来源:互联网 发布:js判断上传文件格式 编辑:程序博客网 时间:2024/06/17 14:02
线程的生命周期: 线程要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。
新建状态:当程序使用New关键字创建了一个线程之后,线程就处于新建状态,此时的线程不会执行线程的线程执行体。
就绪状态:当线程对象调用了start()方法之后,该线程处于就绪护状态。此状态表示线程可以运行了(但并没有运行),该线程何时开始运行,取决于JVM里线程调度器的调度。
运行状态:如果处于就绪状态的线程获得了CPU,开始执行线程执行体,那么该线程处于运行状态。
阻塞状态:当因为主动放弃CPU资源或被动等待某些情况发生时,如果线程不能继续运行,则该线程处于阻塞状态。当发生以下情况时,线程将会进入阻塞状态:
  • 线程调用sleep()方法主动放弃所占用的处理器资源
  • 程序调用了线程的suspend()方法将该线程暂停。(容易发生死锁,已被弃用)
  • 线程调用了一个阻塞式IO方法,在该方法返回之前,该线程被阻塞。
  • 线程试图获得一个正被其他线程所持有的同步监视器时
  • 线程在等待某个通知
线程死亡:当线程以如下方式结束,线程结束后就处于死亡状态。
  • run()或call()方法执行完成后,线程正常结束。
  • 线程抛出一个未捕获的Exception或Error
  • 直接调用该线程的stop()方法来结束该线程。
使用isAlive()方法来判断线程是否处于死亡状态,如果线程就绪、运行、阻塞时,则返回true;当线程处于新建、死亡状态时,返回false。
以下是线程的状态转换图(来自《Java疯狂讲义》)

原创粉丝点击