前言
线程状态分析
提示:以下是本篇文章正文内容,下面案例可供参考
一、线程状态有哪些?
线程的状态在java.lang.Thread.State中有明确定义;
new:尚未启动的线程的线程状态;
Runnble:可运行线程的线程状态,等待CPU调度;
Blocked:线程阻塞等待监视器锁定的线程状态,处于synchronized同步代码块或方法中被阻塞;
Waiting:等待线程的线程状态,不带超时的方式:Object.wait、Thread.jion、LockSupport.part;
Time Waiting:具有指定等待时间的等待线程的线程状态。带超时的方式:Thread.sleep、Object.wait、Thread.join、LockSupport.partNanos、LockSupport.partUntil;
Terminated:终止线程的线程状态,线程正常完成执行或出现异常。
二、线程状态是如何转换的?
三、线程如何中止?
1、stop :中止线程,并且清楚监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。stop不建议使用的主要原因是由于,比如在同步代码块中两个变量自增,但是由于在两个自增变量中间加入stop(),会导致结果不一致。所以不建议使用
2、interrupt:正确中止线程方法,如果目标线程调用wait(),sleep()等方法被阻塞,那么interrupt会生效,该线程的中断被清除,抛出InterruptedException异常。如果目标线程被I/O或者NIO的channel阻塞,I/O操作会被中断或者返回异常。如果以上条件都不满足,则调用interrupt(),实现线程的中断。
3、标志位:正确中止线程的方法,如果程序是循环执行,可以通过标志位的方式来控制线程的中止。