线程01-线程基础

 

线程的生命周期:

1. NEW: 使用new创建一个Thread对象,但没有调用start方法启动线程时的状态; 

2. RUNNABLE:调用start方法时,进入可执行状态,具备执行资格,等待CPU的调度;

  该状态只能意外终止或者进入RUNNING状态;

3. RUNNING:执行状态;线程的状态可以发生如下转换:

  1)直接进入TERMINATED状态,比如:调用已不推荐使用的stop或判断某个逻辑标识;

  2)进入BLOCKED状态,比如:调用sleep,或wait方法而加入waitSet中;

  3)进入某个阻塞的IO操作,比如:网络数据的读写而进入BLOCKED状态;

  4)获取某个锁资源,从而加入到该锁的阻塞队列中而进入BLOCKED状态;

  5)由于CPU的调度器轮询使该线程放弃执行,进入RUNNABLE状态;

  6)线程主动调用yield方法,放弃CPU执行权,进入RUNNABLE状态;

4. BLOCKED:进入该状态的原因见3中描述,阻塞状态中可以切换至如下状态:

  1)直接进入TERMINATED状态,比如:调用已不推荐使用的stop或意外死亡(JVM Crash);

  2)线程阻塞操作的结束,进入到RUNNABLE状态;

  3)线程完成了指定时间 的休眠,进入到RUNNABLE状态;

  4)wait中的线程被其他线程notify/notifyall唤醒,进入到RUNNABLE状态;

  5)线程获得某个锁资源,进入到RUNNABLE状态;

  6)线程在阻塞过程中被打断,比如:其他线程调用了interrupt方法,进入到RUNNABLE状态;

5. TERMINATED:最终状态:

  1)线程运行正常结束,结束生命周期;

  2)线程运行出错意外结束;

  3)JVM Crash,导致所有的线程都结束;

 

创建线程时,为线程指定一个名字,非常重要,有助于问题的排查和线程的跟踪;

新创建的任何一个线程都会有一个父线程(main线程);

创建线程时没有指定ThreadGroup时,子线程将会被加入父线程所在的线程组;

守护线程:具有自动结束生命周期的特性,在退出JVM进程时,守护线程也会结束;

setDaemon用来设置守护线程;

 

posted @ 2018-12-19 00:16  luohoufa  阅读(133)  评论(0)    收藏  举报