Java中线程状态的描述

多线程-基础方法的认识

截止目前线程的复习

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等待锁的时候进入的阻塞状态

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/286755.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两种方案实现等待线程池结束后执行后面的业务代码

使用场景 批量任务处理:当需要并发执行多个任务,然后等待所有任务执行完毕后进行下一步操作时,可以使用这两种方法来等待所有任务执行完毕。 线程池管理:在使用线程池执行任务时,有时需要等待所有任务执行完毕后再关闭…

零基础也能制作家装预约咨询小程序

近年来,随着互联网的快速发展,越来越多的消费者倾向于使用手机进行购物和咨询。然而,许多家装实体店却发现自己的客流量越来越少,急需一种新的方式来吸引顾客。而开发家装预约咨询小程序则成为了一种利用互联网技术来解决这一问题…

标准IO与文件IO

标准IO通过缓冲机制减少系统调用,实现更高的效率 全缓冲:当流的缓冲区无数据或无空间时才执行实际IO操作 行缓冲:当在输入和输出中遇到换行符(\n)时,进行IO操作 当流和一个终端关联时,典型的行缓…

python学习,2.简单的数据类型

1.了解数及运算 整数:1,2,3。 运算符:加减乘除,**(乘方) 浮点数:python将所有带小数点的数称为浮点数。 这一块和别的语言有些不一样, 像C,分为float,double&#x…

基于grpc从零开始搭建一个准生产分布式应用(7) - 01 - 附:GRPC拦截器源码

开始前必读:​​基于grpc从零开始搭建一个准生产分布式应用(0) - quickStart​​ 一、源码目录结构 二、GRPC拦截器源码 2.1、com.zd.baseframework.core.core.common.interceptor package com.zd.baseframework.core.core.common.interceptor;import com.zd.ba…

清华提出ViLa,揭秘 GPT-4V 在机器人视觉规划中的潜力

人类在面对简洁的语言指令时,可以根据上下文进行一连串的操作。对于“拿一罐可乐”的指令,若可乐近在眼前,下意识的反应会是迅速去拿;而当没看到可乐时,人们会主动去冰箱或储物柜中寻找。这种自适应的能力源于对场景的…

算法(2)——滑动窗口

前言: 步骤及算法模板: 确定两个指针变量,left0,right0; 进窗口: 判断: 出窗口 更新结果 接下来我们的所用滑动窗口解决问题都需要以上几个步骤。 一、长度最小的子数组 209. 长度最小的子数组 - 力扣(L…

【重点】【前缀树|字典树】208.实现Trie(前缀树)

题目 前缀树介绍:https://blog.csdn.net/DeveloperFire/article/details/128861092 什么是前缀树 在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查…

安卓开发学习---kotlin版---笔记(三)

网络 安卓主页的网络框架&#xff1a;OkHttp 在OkHttp的基础上进行封装的&#xff1a;Retrofit框架&#xff0c;更常使用 OkHttp学习 在使用网络请求的时候&#xff0c;先添加网络访问权限&#xff1a; <uses-permission android:name"android.permission.INTERNET&…

JavaScript 内存管理的秘密武器:垃圾回收(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

SQL进阶理论篇(十四):CBO优化器是如何计算代价的?

文章目录 简介能调整的代价模型的参数有哪些&#xff1f;mysql.server_costmysql.engine_cost 如何修改这些代价参数&#xff1f;代价模型具体是如何计算的参考文献 简介 大部分RDBMS都支持基于代价的优化器CBO&#xff0c;但其实CBO仍然存在缺陷&#xff08;比如参数配置的不…

Android 原始方法实现Tablayout样式

源码&#xff1a; 【免费】Android原始方法实现Tablayout样式资源-CSDN文库 推荐&#xff1a; GitHub - hackware1993/MagicIndicator: A powerful, customizable and extensible ViewPager indicator framework. As the best alternative of ViewPagerIndicator, TabLayout …