首页 > 其他分享 >线程的五个状态(文字+图示)

线程的五个状态(文字+图示)

时间:2023-08-04 14:11:53浏览次数:30  
标签:状态 图示 阻塞状态 阻塞 五个 线程 就绪 CPU

线程五个状态

1、新建状态(New):新创建了一个线程对象,和其他java对象一样,仅在堆中分配内存。 2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的 start() 方法。该状态的线程位于可运行线程池中,变得可运行,等待被线程调度选中,获取CPU的使用权。(指线程已具备了各种执行条件,只须再获得CPU便可立即执行) 3、运行状态(Running):就绪态的线程获得了CPU时间片,执行程序代码。 4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪态,才有机会转到运行状态。
  • 阻塞的三种情况:
  • 1、等待阻塞:运行状态中的线程执行 wait 方法,等待阻塞;JVM会把这个线程放到这个对象的等待池中;
  • 2、同步阻塞:运行的线程在获取对象的同步锁时,若该锁被别的线程占用,则JVM会把该线程放入锁池中;
  • 3、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或超时、或者I/O处理完毕时,线程重新转入就绪状态。
阻塞状态是正在运行的线程遇到某个特殊情况。例如,延迟、挂起、等待I/O操作完成等。 进入阻塞状态的线程让出CPU,并暂时停止自己的执行。线程进入阻塞状态后,就一直等待,直到引起阻塞的原因被消除,线程又转入就绪状态,重新进入就绪队列排队。 5、死亡状态(Dead):线程执行完了或者因异常退出run()方法,该线程结束声明周期。死亡的线程不可再次复生。  

线程状态图

  0   关于锁池和等待池、yield()、join()、notify()、notifyAll(),我们下一篇讲解。

标签:状态,图示,阻塞状态,阻塞,五个,线程,就绪,CPU
From: https://www.cnblogs.com/nliu/p/17605779.html

相关文章

  • Java多线程总结(超详细总结)
    (Java多线程总结)1.创建线程的方式方式1继承于Thread类创建一个继承于Thread类的子类重写Thread类的run()-->将此线程执行的操作声明在run()中创建Thread类的子类的对象4.通过此对象调用start()例子:遍历100以内的所有的偶数classMyThreadextendsThread{//......
  • 为什么程序计数器、虚拟机栈和本地方法栈是线程私有的呢?为什么堆和方法区是线程共享的
    程序计数器、虚拟机栈和本地方法栈是线程私有的,而堆和方法区是线程共享的,这是由于它们在Java虚拟机中的作用和特性所决定的。程序计数器:程序计数器是一块较小的内存区域,用于存储当前线程正在执行的字节码指令的地址。每个线程都有自己独立的程序计数器,用于记录各自线程的执行......
  • Qt 在线程中invokeMethod采用QueuedConnection模式,调用带指针参数槽,实际不会调用
    widgetObject有操函数Test:voidTest(int*v);在线程中调用Test,会被忽略,实际不会调用。QMetaObject::invokeMethod(widgetObject,"Test",Qt::QueuedConnection,Q_ARG(int*,&v));下面是网上找的理由: 在同一个线程中当信号和槽都在同一个线程中时,值传递参数和引用传递参数有......
  • 解读 --- System.Windows.Forms.Timer是前台线程吗?
    引言今天同事问了我一个问题,System.Windows.Forms.Timer是前台线程还是后台线程,我当时想的是它是跟着UI线程一起结束的,应该是前台线程吧?我确实没有仔细研究过他们的异同,所以带着这个疑问探究一下System.Windows.Forms.Timer。System.Windows.Forms.Timer机制System.Windows.F......
  • .NET Core多线程 (1) Thread与Task
    去年换工作时系统复习了一下.NETCore多线程相关专题,学习了一线码农老哥的《.NET5多线程编程实战》课程,我将复习的知识进行了总结形成本专题。同时也特别推荐有兴趣的读者去学习一线码农老哥的《.NET5多线程编程》课程。本篇,我们来复习一下Thread与Task的相关知识点,预计阅读时......
  • SimpleDateFormat线程安全问题探究
    目录一.问题现象二.原因排查三.原因分析四.解决方案一.问题现象运营部门反馈使用小程序配置的拉新现金红包活动二维码,在扫码后跳转至404页面。二.原因排查1、首先,检查扫码后的跳转链接地址不是对应二维码的实际URL,根据代码逻辑推测,可能是accessToken在微信端已失效导致,检查数......
  • [async]子线程内开启协程 RuntimeError: There is no current event loop in thread '
    在子线程内直接获取事件循环会报错:RuntimeError:Thereisnocurrenteventloopinthread'Thread-2',此时的代码为:loop=asyncio.get_event_loop()loop.run_until_complete(协程函数) #执行解决方法:在子线程内创建并配置事件循环new_loop=asyncio.new_event_loop(......
  • 进程,线程和协程;为什么有了GIL锁还要互斥锁;多态和多态性;鸭子类型
    进程,线程和协程;为什么有了GIL锁还要互斥锁;多态和多态性;鸭子类型为什么有了GIL锁还要互斥锁1.GIL本身就是一个大的互斥锁2.同一个进程下资源是共享的,也就是说多条线程可以操作同一个变量3.多个线程可以操作同一个变量就会出现数据安全问题4.临界区:指一段代码或一段程序片段,需......
  • 面试官:线程是如何通讯的?
    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。在Java中,线程等待和通知的实现手段有以下几种方式:Object类下的wait()、notify()和notifyAll()方法;Condition类下的await()、signal()和signalAll()方法;Lo......
  • pytest 中添加线程
    #D:\pythonProject0726\test_case\test_one.pyimporttimedefsetup_module():print('准备测试数据')defteardown_module():print('清理测试数据')deftest_one():ex=1real=1time.sleep(3)print('1==1')assert......