07、Java并发编程:线程状态
线程的状态一共有6种,在任意时刻线程的状态只能是其中的一种。正确理解线程的状态有助于我们更容易理解线程。具体的线程状态如下:
状态名称 | 说明 |
---|---|
NEW | 初始状态,线程被构建,但是还没有调用start方法 |
RUNNING | 运行状态 |
BLOCKED | 阻塞状态,表示线程阻塞于锁 |
WAITING | 等待状态,表示线程线程进入等待状态,进入该状态后需要其他线程做出通知动作 |
TIME_WAITING | 超时等状态状态,该状态与WAITING不同,它是可以在指定时间内自行返回的 |
TERMINATED | 终止状态,表示当前线程已经执行完毕 |
这六种状态是可以相互进行转化的,下面是具体的转化过程:
可以看到,线程创建之后,调用start()方法开始运行。当线程执行wait()方法之后,线程进入等待状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而超时等待状态相当于在等待状态基础上增加了时间的限制,就是说,超过了设定的时间限制就会返回到运行状态。当线程调用同步方法的时候,在没有获取到锁的情况下,线程会进入阻塞状态。线程在执行Runnable的run()方法之后会进入到终止状态。