线程的生命周期以及状态转换

    Java中任何的对象都是有生命周期的,线程也是有生命周期的。线程正常执行完run()方法或者线程抛出异常和错误时,线程的生命周期就会结束。线程整个生命周期分为五个阶段:新建状态(New),就绪状态(Runnable),运行状态(Running),阻塞状态(Blocked),死亡状态(Terminated)。

java自销毁线程 java线程自己死掉了_多线程

  1. 新建状态(New):创建一个线程对象后,该线程对象就处于新建状态,不能运行,仅仅有Java虚拟机为其分配了内存,没有表现出任何的线程的动态特征。
  2. 就绪状态(Runnable):当线程调用了srart()方法,该线程就处于就绪状态呢也称为可运行状态。处于就绪状态的线程位于可运行池中,只要该线程获得cpu的执行权限开始运行,还需要等待系统的调度。
  3. 运行状态(Running):处于就绪状态的线程获得CPU的使用权,开始执行run()方法中的线程执行体,此时该线程处于运行状态。一个线程不可能一直执行下去,当使用完系统分配的时间,系统就会剥夺线程占用的CPU资源,让给其他线程执行。
  4. 阻塞状态(Blocked):线程进入阻塞状态后,就不会进入排队对列,只用当引起阻塞的原因消除后,线程才可以转入就绪状态。下面列举一些阻塞原因:
        当线程视图获得某个对象的同步锁,该锁被其线程占用,该线程就会进入阻塞状态,只有该线程或的锁才会进入就绪状态。
        当线程调用了一个阻塞的io方法时,该线程就会进入阻塞状态,如果想进入就绪状态必须等到阻塞io方法返回。
        当线程调用了wait()方法,该线程就会进入阻塞状态,如果想进入就绪状态就需要使用notify()方法唤醒该线程。
        当线程调用了Thread类的sleep(long millid)方法时,线程也会进入阻塞状态,只用等到线程休眠时间到了之后,线程会自动进入就绪状态。
        当在一个线程中调用了另一个的线程的join()方法,也会使得该线程进如阻塞状态,在这种状态下,只用等到新加入的线程运行结束之后才会结束阻塞,该线程就会进入就绪状态。
  5. 死亡状态(Terminated):线程run()正常执行完毕或者抛出一个异常,错误,线程就会进入死亡装态。线程一旦死亡该线程不在拥有运行资格,也不能转图其他状态。
    加油吧!!!