java线程生命周期

java线程生命周期

线程可以分为4个状态:

1

new

创建线程时通过new方法来创建,刚刚创建好还没有没有执行start方法的线程对象就处于new状态

terminated(dead)

线程执行run方法,执行完毕

runnable&running

ready状态代表该线程准备好了,随时可以由调度器分配给cpu执行,而running状态表示该线程正在占用cpu,原子操作结束后,又可能由调度器让出cpu进入ready状态

2

waiting&timed waiting

当线程处在runnable状态时调用了wait()方法,这时候该线程就进入了waiting状态,线程一旦进入了waiting状态就不会自己醒来了,必须要别的线程通过notify或者notifyAll方法来唤醒,不然该线程一直处于waiting状态,永远也得不到使用cpu的机会。

timed waiting状态会有一个时间设置让自己定时醒来,时间一到就进入到runnable状态,而这个时间呢也是在runnable状态时候调用wait(int ms)或者sleep(int ms)来进入timed waiting状态

wait方法会让当前线程释放线程锁,而sleep方法不会

blocked

线程A获取cpu并进入synchronized statement,处于runnable的B资源一时半会没有办法得到cpu,只能等线程A的synchronized statement执行完毕后,才能有机会获取cpu,先进入了blocked状态,当线程A执行完synchronized statement后再进入runnable状态。