java线程之Thread类


1. java线程的生命周期

java中的线程的生命周期有6个阶段:
- NEW(新建)
- RUNNABLE(就绪/运行)
- BLOCKED(阻塞)
- WAITING(等待)
- TIMED_WAITING(时间等待)
- TERMINATED(消亡)
线程的生命周期用一个枚举类来表示:

java线程之Thread类_第1张图片
线程的生命周期

java线程之Thread类_第2张图片
线程的生命周期图解

2. 线程的上下文切换

CPU在执行一个线程的过程中,转而去执行另外一个线程,这个叫做线程上下文切换; 在进行线程上下文切换时要保存好当前线程的运行状态, 如: 程序计数器里的值, CPU寄存器里的值等, 以使线程下一次执行能够从中断点恢复执行;

3. java线程的优先级

在java中, 线程的优先级分为 1 - 10 这10个等级;
JDK中使用3个常量来预定义线程优先级的值:

java线程之Thread类_第3张图片
线程优先级

注意: 线程的优先级具有继承性, 比如, 线程A启动线程B, 则B线程的优先级默认与线程A是一样的

4. java线程的分类

java的线程可以分为两种类型的线程: 一种是用户线程, 另一种是守护线程;
守护线程是一种特许的线程, 当jvm进程中不存在非守护线程时则所有守护线程会自动销毁;
相关方法:

java线程之Thread类_第4张图片
守护线程

5. Thread类 的常用方法

  • currentThread 方法 (静态方法)
    返回正在执行当前代码段的线程对象
currentThread()方法
  • sleep(long)方法 (静态方法)
    在指定的毫秒数内让当前正在执行的线程Thread.currentThread()休眠(进入 TIMED_WAITING 状态)

    sleep方法

注意:
调用sleep方法而进入 TIMED_WAITING 状态的线程并不会释放它本身已获得的对象锁;
Thread.sleep(long) 方法执行前或执行时当前线程的表示中断状态的标志被interrupt()方法置为true则会抛出InterruptedException异常;

  • yield() 方法 (静态方法)
    告知jvm当前线程想要放弃当前的CPU资源, 将它让给其他的任务去占用CPU执行时间, 注意: jvm未必会听从它的建议, 即有可能当前线程刚刚放弃又马上获得CPU时间片

  • interrupted() 方法 (静态方法)
    判断当前线程是否已经被中断

interrupted方法

注意: interrupted() 方法会将当前线程的中断状态清除
例子:

java线程之Thread类_第5张图片
interrupted方法例子

  • isInterrupted() 方法 (实例方法)
    判断调用该方法的线程对象是否已经是中断状态
java线程之Thread类_第6张图片
isInterrupted方法
  • interrupt() 方法 (实例方法)
    调用 interrupt() 方法并不是真的停止线程, 而是在当前线程中打上了一个停止的标记
java线程之Thread类_第7张图片
interrupt方法
  • isAlive 方法 (实例方法)
    判断当前的线程是否处于活动状态(活动状态是指线程已经启动且尚未终止, 包括除TERMINATED外的其他状态)
isAlive()方法

你可能感兴趣的:(java线程之Thread类)