java线程之Thread类
1. java线程的生命周期
java中的线程的生命周期有6个阶段:
- NEW(新建)
- RUNNABLE(就绪/运行)
- BLOCKED(阻塞)
- WAITING(等待)
- TIMED_WAITING(时间等待)
- TERMINATED(消亡)
线程的生命周期用一个枚举类来表示:
线程的生命周期图解
2. 线程的上下文切换
CPU在执行一个线程的过程中,转而去执行另外一个线程,这个叫做线程上下文切换; 在进行线程上下文切换时要保存好当前线程的运行状态, 如: 程序计数器里的值, CPU寄存器里的值等, 以使线程下一次执行能够从中断点恢复执行;
3. java线程的优先级
在java中, 线程的优先级分为 1 - 10 这10个等级;
JDK中使用3个常量来预定义线程优先级的值:
注意: 线程的优先级具有继承性, 比如, 线程A启动线程B, 则B线程的优先级默认与线程A是一样的
4. java线程的分类
java的线程可以分为两种类型的线程: 一种是用户线程, 另一种是守护线程;
守护线程是一种特许的线程, 当jvm进程中不存在非守护线程时则所有守护线程会自动销毁;
相关方法:
5. Thread类
的常用方法
-
currentThread
方法 (静态方法)
返回正在执行当前代码段的线程对象
-
sleep方法sleep(long)
方法 (静态方法)
在指定的毫秒数内让当前正在执行的线程Thread.currentThread()休眠(进入TIMED_WAITING
状态)
注意:
调用sleep方法而进入TIMED_WAITING
状态的线程并不会释放它本身已获得的对象锁;
Thread.sleep(long) 方法执行前或执行时当前线程的表示中断状态的标志被interrupt()方法置为true则会抛出InterruptedException异常;
-
yield()
方法 (静态方法)
告知jvm当前线程想要放弃当前的CPU资源, 将它让给其他的任务去占用CPU执行时间, 注意: jvm未必会听从它的建议, 即有可能当前线程刚刚放弃又马上获得CPU时间片 -
interrupted()
方法 (静态方法)
判断当前线程是否已经被中断
注意: interrupted() 方法会将当前线程的中断状态清除
interrupted方法例子
例子:
-
isInterrupted()
方法 (实例方法)
判断调用该方法的线程对象是否已经是中断状态
-
interrupt()
方法 (实例方法)
调用interrupt()
方法并不是真的停止线程, 而是在当前线程中打上了一个停止的标记
-
isAlive
方法 (实例方法)
判断当前的线程是否处于活动状态(活动状态是指线程已经启动且尚未终止, 包括除TERMINATED
外的其他状态)