面试题

关于线程方面的问题想必是面试时经常被问到的,所以我们来整理下关于线程的生命周期中的一些知识

线程的生命周期

线程的生命周期(图解-编程之家

1.新建
  新建即创建线程对象,用关键字new创建一个线程对象时,线程处于新建状态
2.就绪
   线程对象调用start()方法时,该线程处于就绪状态,此时的线程有执行资格但是却没有执行权
3.运行

如果CPU是单核,则在任一时刻都只有一个线程在执行。当线程数据大于核 数时,就会出现线程轮换。

所有桌面和服务器系统都采用的是抢占式调度策略,即当前线程在系统允许的执行时间之后,就给其他线程获得执行机会,且优先给优化级高的线程。

在运行状态下的线程有执行资格有cpu的执行权

4.阻塞

发生以下情况时,线程将进入阻塞状态:
调用sleep()方法时。此时会放弃它所占用的处理器资源。【过了sleep指定时间不再阻塞】
调用一个阻塞式IO方法还没有返回之前,该线程被阻塞。【阻塞IO方法返回后不再阻塞】
试图获取一个正被其他线程所持有的同步监视器。【拿到监听器不再阻塞】
等待通知时(notify)。【其他线程调用了notify时不再阻塞】
调用suspend()方法将程序挂起时。【线程调用resume()方法时撤销挂起时不再阻塞】

阻塞状态下的线程没有执行资格也没有cpu的执行权,但是一些操作可以把该线程激活(如notify()方法)但是激活后会返回到就绪状态

5.死亡

线程死亡情况:
线程正常结束(run或call方法执行完)

线程抛出一个未捕获的Exception或Error

线程自己调用stop()方法(该方法容易导致死锁)

线程处于死亡状态时,则此线程对象变成垃圾等待被回收