Java Thread|线程的状态

以下内容全部为源码学习加上自己的经验所得

Java线程分别有一下六种状态:

NEW,RUNNABLE,BLOCKED,WAITING,TIME_WAITING,TERMINATED.

①NEW状态,通过new Thread() 创建一个线程对象的时候,这是一个线程的初始状态,但是尚未启动!

②RUNNABLE状态 在java 虚拟机中的可运行状态,但是可能会等待操作系统中的其他资源,如CPU 资源

③BLOCKED状态,也即阻塞状态。因为等待获取对象的监视器锁而被阻塞,通常因为以下情况会被阻塞:

  隐式 synchronized 同步代码块或者方法

  现式 Lock调用

  调用Object.wait()之后,再次进入同步块或这同步方法

④WAITTING 等待状态,调用如下方法会进入等待状态:

  不带超时的Object.wait 方法

       不带超时的Thread.join 方法

       LockSupport.part 方法

线程进入等待状态后,会等待其他线程执行特定操作,以退出等待状态。比如某个线程在某个object 上调用wait()方法后,会等待另外的线程调用这个object.notify 或者object.notifyAll()来唤醒之前在这个object 对象上等待的线程。有比如有一个线程调用了thread.join()后,会一直等待thread 线程终止。

⑤TIMED_WAITING超时等待状态,调用下面方法会进入超时等待状态

      Thread.sleep()

      带超时的等待,Object.wait(long timeout)

      带超时的,Thread.join(long timeout)

      LockSupport.parkNanos(long timeout)

      LockSupport.parkUntil(long timeout)

相当于状态④加了超时条件,从等待开始,到达超时时间,线程自动退出等待状态。

⑥结束状态,线程已经执行完毕

       

猜你喜欢

转载自blog.csdn.net/l491337898/article/details/82286041