首页 > 编程语言 >干货-并发编程提高——线程状态(二)

干货-并发编程提高——线程状态(二)

时间:2024-07-23 17:58:11浏览次数:13  
标签:状态 方法 编程 干货 线程 阻塞状态 等待 CPU

线程:是操作系统调度的最小单元,也叫轻量级进程。它被包含在进程之中,是进程中的实际运作单位。同一进程可以创建多个线程,每个进程都有自己独立的一块内存空间。并且能够访问共享的内存变量。

Java线程的状态(区分注意的是操作系统线程的状态还是java的线程状态,两者不能完全划等号)

  1. 新建 New 创建后尚未启动的线程处于此初始状态 一个线程start方法只能执行一次 再次调用会抛IllegalThreadStateException <非法线程状态>
  2. 运行 Runable 此状态包括了操作系统线程状态中的 Running<获取到CPU并在执行>和Ready<准备在CPU执行>两种状态。也就是处于此状态的线程有可能正在执行,也有可能正在等待CPU为它分配执行时间但统称为java线程的Runable状态。
    1. 当一个线程对象的start方法被调用时
    2. 正在运行的线程CPU时间片耗尽
    3. 正处于阻塞状态的线程满足了运行条件
    4. 获取到CPU时间片,正在执行
    5. 处于Runable状态下的线程正在 Java 虚拟机中执行,但它可能正在等待来自于操作系统的其它资源,比如处理器。
  3. 无限期等待 Waiting 处于这种状态的线程不会被分配CPU执行时间,它们要等待其他线程显示地唤醒。以下方法会让线程陷入无限期的等待状态:
    1. 没有设置Timeout参数的Object.wait()
    2. 没有设置Timeout参数的Thread.join()
    3. LockSupport.park方法
  4. 限期等待 Timed Waiting 处于此状态的线程也不会被分配CPU执行时间,不过可以不等待其他线程显示地唤醒,在一定时间之后它们会由系统自动唤醒。以下方法会让线程进入限期等待状态:
    1. Thread.sleep() 方法,没有任何同步语义。所以线程不会失去任何monitor的所有权。也就不会释放锁。
    2. 设置了Timeout参数的Object.wait()方法
    3. 设置了Timeout参数的Thread.join()方法
    4. LockSupport.parkNanos()方法
    5. LockSupport.parkUntil()方法
  5. 阻塞状态 Blocked 阻塞状态”与“等待状态”的区别是: “阻塞状态”是在等待获取到一个排他锁,这个事件将在另外一个线程放弃这个锁的时候发生,而“等待状态”则是等待一段时间,或者唤醒动作的发生。在程序等待进入同步区域的时候,线程将进入这种状态。
  6. 终结状态 Terminated当线程run方法执行完或者遇到异常退出时线程死亡,线程的生命周期便宣告结束。

    知识点:

    多线程的三个问题:原子性,有序性,可见性。导致可见性的原因是缓存,导致有序性的原因是编译优化

标签:状态,方法,编程,干货,线程,阻塞状态,等待,CPU
From: https://blog.csdn.net/weixin_39384775/article/details/140642140

相关文章

  • 从零开始学Java(超详细韩顺平老师笔记梳理)08——面向对象编程中级(上)IDEA常用快捷键、包
    文章目录前言一、IDEA使用常用快捷键模板/自定义模板二、包package1.基本介绍2.包的命名规范3.常用的包和如何引入4.注意事项和细节三、访问修饰符(四类)四、封装Encapsulation(重点)1.封装介绍2.封装步骤3.快速入门4.封装与构造器五、继承(重点)1.为什么需要继承2......
  • Java并发编程
     目录 1、JUC并发编程2、线程池3、Executor接口 4、ExecutorServicw接口(1)语句:创建线程池(2)语句:调用线程:执行结果:​编辑 5、对比调用线程池和直接创建线程程序执行速度 6、插入知识点:输出系统时间/程序执行的时间1、JUC并发编程它是Java.util.concurrent......
  • C#中十种常见的开启线程的方式
    //第1种:Thread类。使用场景:快速启动执行简单任务。//优点:简单易用。提供了直接控制线程的方法,如Start、Suspend、Resume、Abort等。//缺点:功能较少,不适合复杂的线程管理;直接管理线程可能导致资源利用率不高或死锁等问题。T......
  • 系统整容纪:揭秘Java编程之美:掌握这些编码规范,让你的代码一跃成为行业典范
     分享工作中的点点滴滴,贯彻千里之行,始于足下,最终以微不足道的量变引起化蝶的质变精神。以自己为例拒绝在舒适的中央区域安逸的躺着,以便在不知不觉中被社会所淘汰,也不盲目的直接跃迁进困哪区域,在受挫的同时又跌回原有的舒适区域内,造成这样一个浑浑噩噩的让人无法进步的循环怪圈......
  • Golang异步编程方式和技巧
    Golang异步编程方式和技巧原创 腾讯程序员 腾讯技术工程  2024年04月23日18:00 广东 12人听过Golang基于多线程、协程实现,与生俱来适合异步编程,当我们遇到那种需要批量处理且耗时的操作时,传统的线性执行就显得吃力,这时就会想到异步并行处理。下面介绍一些异步......
  • 快速理解进程与线程
    文章目录......
  • C++多线程并发基础入门教程
    C++多线程并发基础入门教程《C++ConcurrencyinAction,SecondEdition》这本书深入浅出的讲解了C++多线程知识;如果英文水平足够好,可以查阅英文原版,它也有中文译本,虽然翻译过来的质量不如原版,但英文原版阅读太费精力;我推荐新手或者有一定经验的人看这本书。1什么是C++多......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(2)1003
    绝对不模拟的简单魔方要相信题目的提示(直接模拟的代码长达300行),由于魔方的特性,不论如何转动脚上的色块颜色不会变动,只要枚举8个角块看看是否一致即可,枚举角块时需确定访问角块颜色的顺序,例如以3号为顶,后左上访问顺序为123即坐标为\((3,4)->(4,3)-(4,4)\),那么可以通过此角......
  • PHP 多线程和异步编程的常见陷阱
    本文由ChatMoney团队出品在PHP开发中,多线程和异步编程是提高应用性能和响应速度的重要手段。然而,这些技术也带来了许多挑战和陷阱,如共享状态冲突、死锁、超时、资源泄漏以及调试困难等。本文将详细探讨这些陷阱,并提供相应的解决方案和代码示例。共享状态冲突在多线程环......
  • 0基础小白学编程一定要知道的十个网站
    作为计算机专业马上要毕业的学姐分享一期——新手编程需要知道的高含金量的网站这些基础网站陪我走过一个又一个考试周,简直yyds!!那不得把我这三年来压箱底的网站交出来如果觉得对你有点用,辛苦友友一键三连哦!抱拳=.=废话不多说,直接开正文----------------------------------......