线程的生命周期

Posted by 小白 on December 13, 2016

状态

  1. 新建(new Thread),已经创建了实例,有了自己的内存空间,但还不是活的。
  2. 就绪(runnable),已经被启动,但还没被分配CPU时间片,此时已经是活的。
  3. 运行(running),获得CPU资源,此时除非该线程自动放弃CPU资源或者有优先级更高的线程进入,将一直运行到正常结束。
  4. 堵塞(blocked),让出CPU并暂停自己的执行,此时仍然活着。
  5. 死亡(dead),执行结束或被其它线程杀死,不可恢复至就绪状态。

对应的方法

run();创建线程时必须实现的方法 start();开启线程 sleep();让出CPU,不释放锁 wait();释放CPU和锁 notify();唤醒资源池中等待的第一个线程 yied();临时释放CPU,让同等优先权的线程运行,若没有,则不起作用。

线程生命周期图:

守护线程

当进程结束,守护线程也随之结束,不需关心它的结束问题,这种线程叫做守护线程。 通过thread.setDaemon(true);来设置守护线程

注意:当进程中的所有非守护线程都结束时,即使守护线程正在运行,进程仍会结束。