1、新建(new Thread()):新创建一个线程。
2、可运行态(runnable):当新创建的线程调用了start()方法,即进入可运行态,等待线程调度。
3、运行态(running):当 线程获取cpu资源,获取时间片,则进入运行态。
4、阻塞态(block):阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了时间片,暂时停止运行。直到线程再次进入可运行(runnable)状态,才有机会再次获得时间片进入运行(running)状态。阻塞的情况分三种:
(1)等待阻塞:运行(running)的线程执行o.wait()方法(o为同步监视器对象),JVM会把该线程放入等待队列(waiting queue)中。
(2)同步阻塞:运行(running)的线程在获取同步监视器对象的同步锁时,若发现该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
(3)其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。