Java中线程状态的描述

发布时间:2023年12月19日

多线程-基础方法的认识

截止目前线程的复习

Thread 类

创建Thread类的方法
  1. 继承Thread类,重写run方法
  2. 实现Runnable接口,重写run方法
  3. 使用匿名内部类继承Thread类,重写run方法
  4. 使用匿名内部类实现Runnable接口,重写run方法
  5. 使用Lambda表达式

run方法中的所有的代码是当前线程对象需要实现的逻辑,也就是线程需要做的工作.线程的真正的开始运行,是在主线程中使用线程对象调用了start方法

中断线程的方式
  1. 自己在线程中定义一个标志位,然后在外部实现对线程自定义的中断的规则
  2. 使用标准库中自带的标志位 isInterrupted()方法判定,然后使用interrupt()方法在外部实现对线程自定义中断的规则然后进行触发中断

(使用interrupt()方法进行触发中断的条件下,还和当前线程的状态的关系有关,如果当前的线程对象是出于Runnable状态,那么调用interrupt() 方法会设置标志位,也就是把线程给中断了; 如果当前的线程是出于阻塞(sleep/wait)状态,那么此时表面是没有设置标志位,但是在源码中的确是设置了标志位,但是后面又消除了)

线程等待
  • join()方法

在main 方法中调用了这个方法 : 线程对象t.join()

这个意思是main线程和线程t同时开始,但是main线程一旦调用了上述的方法,那么此时开始main线程必须等线程t执行完之后再继续执行后续的逻辑.此时的mian线程(调用者)陷入了阻塞状态

线程休眠
  • sleep()方法

sleep(时间参数) ,该方法是在Thread类中的静态方法,在什么线程中的run方法中调用,那么当前线程对象就会休眠,而休眠的时间就是该方法的参数(单位是ms毫秒)

获取线程的对象
  • CurrentThread() 方法

这个方法是Thread类中的静态方法,在什么线程调用这个方法,那么获取的就是对应的线程对象. 例如 : 如果我们在一个线程的run方法中使用标准库中自带的标志位来决定线程什么时候结束,那么我们就需要这样实现

Thread thread = new Thread(()->{

	whilr(!Thread.CurrentThread().isInterrupted()){
	//在这里实现循环语句中代码的逻辑
	}

});
Java中的线程的状态
状态名描述
NEWjava中的对象创建出来了,但是内核中的PCB 还没有创建(还没有真正的创建)
TERMINATED内核中的PCB销毁了,但是Thread对象还在
RUNNABLE就绪状态(正在CPU上运行/在就绪队列中排队)
TIMED_WAITING按照一定的时间进行阻塞,调用sleep
WAITING特殊的阻塞状态,调用waiting
BLAOKED等待锁的时候进入的阻塞状态

总结: 整体来说我们的状态大致分为两种: 就绪 + 阻塞 (分别拆分成三种情况)

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_75202470/article/details/135092250
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。