首页 > 其他分享 >线程六态

线程六态

时间:2023-07-07 09:03:15浏览次数:29  
标签:状态 RUNNABLE 六态 Thread LockSupport 线程 等待

在 Java 中,Thread 类定义了六个状态来表示线程的生命周期。这些状态通过 Thread 类中的常量来表示,分别是:

 

1. NEW(新建状态):当一个 Thread 对象被创建时,它处于新建状态。这时候线程还没有开始执行,直到调用了 start() 方法。

 

2. RUNNABLE(可运行状态):当一个线程正在 Java 虚拟机中执行时,它处于可运行状态。这包括了操作系统线程正在执行线程的代码,或者线程处于就绪状态等待执行。在 RUNNABLE 状态中,可能还存在一些阻塞情况,如等待 IO 操作完成、等待获取锁资源等。

 

3. BLOCKED(阻塞状态):一个处于 BLOCKED 状态的线程正在等待获取一个被其他线程持有的监视器锁(synchronized 关键字修饰的对象)。当线程在等待锁资源时,便会进入阻塞状态。

 

4. WAITING(等待状态):当线程调用了 Object 类的 wait()、join() 或 LockSupport 的 park() 方法,或者 LockSupport 的 parkNanos()、parkUntil() 方法时,线程会进入等待状态。处于等待状态的线程需要其他线程的唤醒或特定的时间条件满足才能继续执行。

 

5. TIMED_WAITING(计时等待状态):在线程调用了具有超时参数的 Thread 类的 sleep()、join()、wait() 方法或 LockSupport 的 parkNanos()、parkUntil() 方法时,线程会进入计时等待状态。计时等待状态将在指定的时间后自动返回 RUNNABLE 状态。

 

6. TERMINATED(终止状态):当线程的 run() 方法执行完毕或者调用了 Thread 类的 stop() 方法导致线程停止时,线程处于终止状态。

 

这些线程状态代表了不同的线程生命周期阶段,理解线程状态可以帮助我们更好地管理和调试多线程程序。

标签:状态,RUNNABLE,六态,Thread,LockSupport,线程,等待
From: https://www.cnblogs.com/Rover20230226/p/17533828.html

相关文章

  • python基础day39 生产者消费者模型和线程相关
    如何查看进程的id号进程都有几个属性:进程名、进程id号(pid--->processid)每个进程都有一个唯一的id号,通过这个id号就能找到这个进程importosimporttimedeftask():print("task中的子进程号:",os.getpid())print("主进程中的进程号:",os.getppid())#parent......
  • 多线程python
    如何开启进程使用的是内置的模块:multiprocessfrommultiprocessingimportProcessdeftask():withopen('a.txt','w',encoding="utf8")asf:f.write('helloworld')#开一个进程来执行task这个任务#如何开进程"""在Wind......
  • Kotlin协程:打破线程框架的思维
    Kotlin协程:打破线程框架的思维前言协程是Kotlin对比Java的最大优势,需要理解协程的设计理念和知识体系,建立协程思维模型。本文将介绍协程的概念、特性和原理,以及如何在Android开发中使用协程来简化并发编程和优化软件架构。什么是协程协程是一种互相协作的程序,可以在任意地方挂......
  • python 并发编程之线程
    一、队列的使用1、在python中,内置的有一个类,Queue就是队列2、队列的使用frommultiprocessingimportQueueif__name__=='__main__':q=Queue(3)#队列的大小默认很大#1.如何入队、"""obj,block=True,timeout=None"""q.put('hellow......
  • 多线程
    了解多线程并发和并行进程和线程总结多线程的实现方式--继承Thread实现步骤packagecom.thread;publicclassMyThreadextendsThread{@Overridepublicvoidrun(){//run()里面的代码就是线程开启之后执行的代码for(inti=0;......
  • python基础 如何查看进程的id号、队列的使用(queue)、解决进程之间隔离关系、生产者消
    如何查看进程id号进程都有几个属性:进程名、进程id号(pid-->processid)每一个进程都有一个唯一的id号,通过这个id号就能找到这个进程importosimporttimedeftask():print("task中的子进程号:",os.getpid())print("主进程中的进程号:",os.getppid())#parent......
  • 解决Java 线程池 共享变量的具体操作步骤
    实现Java线程池共享变量的步骤为了实现Java线程池共享变量,我们需要以下步骤:步骤描述步骤一创建一个线程池步骤二创建一个共享变量步骤三在需要共享变量的地方,使用线程池提交任务步骤四在任务中使用共享变量进行操作下面我将详细介绍每一步的操作和所需......
  • 解决Java 线程安全的DateFormat的具体操作步骤
    Java线程安全的DateFormat在多线程的环境下使用Java的SimpleDateFormat类进行日期格式化操作时,可能会遇到线程安全的问题。这篇文章将会介绍为什么SimpleDateFormat不是线程安全的,以及如何解决这个问题。为什么SimpleDateFormat不是线程安全的?SimpleDateFormat是Java中用于格......
  • 一个C++11的线程函数
    一个C++11的线程函数#include<iostream>#include<thread>#include<chrono>voidprintNumbers(){for(inti=1;i<=100;++i){std::cout<<i<<std::endl;std::this_thread::sleep_for(std::chrono::millis......
  • 2023年7月5日,生产者消费者模型,线程的休眠、礼让、合并、中断、生命周期、守护线程
    线程复习1.线程的休眠需求:编写一个抽取学员回答问题的程序,要求倒数三秒后输出被抽中的学员姓名分析:1.创建String数组存放学员姓名2.利用随机数获取学员下标3.通过下标获取学员姓名4.倒计时3秒通过for循环使用Thread.sleep(1000)来实现,Thread.sleep(1000);此方法为静态......