线程有几种状态,分别是哪些?
1.New,新建状态,当程序new了一个线程后,线程就处于新建状态,此时线程还未启动;当线程对象调用start()方法时,线程启动进入Runnable(就绪状态)状态
2.Runnable状态:可运行(就绪)状态;此时线程准备就绪,等待获取CPU;
3.Running(运行状态);线程获取到了cpu,进入运行状态,执行run方法.
4.Blocking(阻塞状态) 线程调用了slepp()方法,会主动放弃cpu资源;当阻塞结束时,该线程将会到就绪状态,而非直接进入运行状态.
5.Dead状态,也就是死亡状态;线程的run方法结束,就会进入dead状态,线程死亡后不能作为线程再次调用;
sleep让当前线程进入休眠状态(但线程不会释放已获取的锁),从休眠状态“苏醒”后,线程会进入到Runnable状态。
wait()//交出cpu,让CPU去执行其他的任务,让线程进入阻塞状态,同时也会释放锁
yield()//使当前线程交出CPU,让CPU去执行其他的任务,但不会是线程进入阻塞状态,而是重置为就绪状态,yield方法不会释放锁
wait和sleep的区别:
1.sleep是thread类的静态方法,而wait是object的
2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使其他线程可以使用同步控制块或者方法
3.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常。
网友评论