Java并发编程初级篇(三):线程状态以及状态转换过程
线程状态: NEW:当一个线程被创建之初,那么此时线程就是新生状态,此状态下线程已经分配完毕内存空间。 RUNNABLE:当调用Thread.start()方法后,线程进入就绪状态,此时线程并不会马上开始执行。需要等待JVM选中并分配CPU时间才能开始执行。 RUNNING:线程被分配CPU时间后,进入执行状态,在此状态下会运行run()方法中定义的代码。 BLOCKED:当处于运行状态的线程,调用一个被阻塞的方法;试图获取一个正在被其他线程占用的锁,都会进入阻塞状态。 WAITING:等待状态。当调用了 Object.wait() ; Thread.join() ; LockSupport.park() ;方法后线程会进入等待状态。调用 Object.wait() 的线程会等待 Object.notify() 方法的调用而重新进入就绪状态。调用 Thread.join() 方法的线程会等待调用方法线程执行结束而进入结束状态。 TIMED_WAITING:固定时间等待状态。此状态下的线程都有一个固定的等待时间,通过调用 Object.wait(Long) , Thread.sleep(Long) , Thread.join(Long) ,都会让线程进入此状态。处于此状态的线程会等待指定的时间,然后恢复执行。 TERMINATED:线程执行结束。 状态转换图: 线程状态转换函数: