Java线程状态(Thread.State)

1.Thread.State类

在Java中,Thread.State 是一个枚举类型,它定义了线程可能处于的几种状态。这些状态可以帮助开发人员更好地理解和监控线程的行为

状态说明
NEW (新建)线程被创建但尚未启动(即 start() 方法尚未被调用)。此时,线程对象已经存在,但是还没有在JVM中执行任何代码
RUNNABLE (可运行)线程正在JVM中执行,或者它可能在等待CPU资源以便执行
BLOCKED (阻塞)线程在等待一个监视器锁(通常是对象的 synchronized 块或方法)以便能够继续执行
WAITING (等待)线程在等待另一个线程执行特定的动作(注:线程在等待期间不会释放它持有的任何锁)
TIMED_WAITING (限时等待)与 WAITING 状态类似,但线程等待的时间是有限的。如果等待时间结束或收到特定的动作,线程将恢复执行
TERMINATED (终止)线程已经执行完毕或因为某种原因(如异常或中断)而终止(注:线程一旦进入 TERMINATED 状态,就不能再回到其他状态)

2.NEW (新建)

当创建一个新的Thread对象时,该线程就处于新建状态

Thread t = new Thread();

3.RUNNABLE (可运行)

可运行状态包括了“就绪”和“运行”两种状态。调用线程的start()方法,此线程进入就绪状态。当前线程sleep()方法结束,其他线程join()结束,某个线程拿到对象锁,这些线程也将进入就绪状态。当线程调度程序从可运行池中选择一个线程作为当前线程时,线程进入运行状态,此时线程占有CPU资源并在CPU上运行

4.BLOCKED (阻塞)

线程在等待获取一个锁以进入或重新进入同步代码块时,它会进入阻塞状态。当阻塞的原因消失,线程重新转入RUNNABLE (可运行)态

5.WAITING (等待)

线程进入等待状态,是因为它调用了其他线程的join()方法,或者调用了无参数的wait()方法。在这种情况下,线程会等待另一个线程的操作完成或者等待notify()/notifyAll()消息

6.TIMED_WAITING (限时等待)

线程进入定时等待状态,是因为它调用了sleep()或者带有指定时间的wait()或join()方法。在指定的时间过去之后,线程会自动返回RUNNABLE状态

7.TERMINATED (终止)

(1)当线程执行完毕,即线程执行完所有的代码后,线程会自动终止
(2)调用stop()方法(但该方法已经被废弃)
(3)调用线程的interrupt()方法,线程可以通过检查中断标志位来决定是否终止执行
(4)自定义一个中断标志位,并在外部进行修改。这个标志位需要用volatile进行修饰
(5)当线程中抛出未捕获的异常时,线程会终止执行

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 当一个线程正在等待另一个线程执行某个操作时,该线程会进入 WAITING 状态。在这种情况下,线程不会参与 CPU 时间的分配。当等待的操作完成后,该线程会被重新调度为可运行状态。WAITING 状态可以通过以下方式之一转换为可运行状态: 1. 其他线程调用了该线程的 notify() 或 notifyAll() 方法,并且当前线程已经被选定为接收通知的线程之一。 2. 其他线程调用了该线程的 interrupt() 方法,并且该线程已经在等待某个操作完成时被中断。 WAITING 状态线程通常用于实现线程间的协作。例如,一个线程在等待另一个线程读取共享数据结构的所有元素,然后通知它已经完成。在等待的过程中,该线程将被放置在 WAITING 状态。 ### 回答2: java.lang.Thread.State.WAITING(停车)是JavaThread类的一个状态。当一个线程处于WAITING状态时,它正在等待其他某个线程执行特定的动作。 WAITING状态可以通过以下几种方式触发: 1. 当线程调用Object的wait()方法时,它会进入WAITING状态,直到其他线程调用相同对象的notify()或notifyAll()方法来唤醒它。 2. 当线程调用Thread的join()方法时,它会进入WAITING状态,直到被等待的线程执行完毕。 3. 当线程调用LockSupport的park()方法时,它会进入WAITING状态,直到其他线程调用相同线程的unpark()方法来解除阻塞。 在WAITING状态下,线程不会去抢占CPU资源,它处于一种等待的状态,直到某个条件满足才能继续执行。 WAITING状态线程可以由其他线程通过不同的方式来唤醒,例如: 1. 调用被等待线程对象的notify()方法,唤醒等待在该对象上的一个线程。 2. 调用被等待线程对象的notifyAll()方法,唤醒等待在该对象上的所有线程。 3. 调用被等待线程对象的interrupt()方法,中断被等待线程的等待状态,抛出InterruptedException异常。 总之,WAITING状态表示该线程正在等待其他线程的某个特定动作完成。 ### 回答3: java.lang.Thread.State.WAITING(停车)是Thread类提供的一个状态之一。当线程处于WAITING状态时,说明线程已经停止活动并且等待某个条件的满足才能继续执行。 一个线程进入WAITING状态的常见方式是调用了Object类的wait()方法。调用wait()方法会使线程进入WAITING状态,并且会释放该线程持有的对象锁,允许其他线程进入和修改同一个对象。线程将停下来等待其他线程通过notify()或notifyAll()方法来唤醒它,重新竞争对象锁并且继续执行。 另一种使线程进入WAITING状态的方式是调用Thread类的join()方法。join()方法用于等待该线程终止,并且会使得调用线程进入WAITING状态,直到该线程结束才会继续执行。 当一个线程处于WAITING状态时,它需要等待其他线程的唤醒或者等待某个条件的满足,这种状态通常与多线程程序中的线程协作、同步等相关。线程可以通过调用notify()或notifyAll()方法来唤醒WAITING状态的其他线程,以达到线程之间的通信和协调。 总结来说,java.lang.Thread.State.WAITING(停车)是一种线程状态,表示线程已经停止活动并且等待某个条件的满足才能继续执行。这种状态通常与线程之间的协作和同步等相关。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码届艺术家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值