java-android面试-线程状态

news2025/1/24 7:15:48

开篇一张图(本图来源于网络),余下全靠编,我们正式开始。

一、线程的状态

总共有6种状态,分别如下:

1. 新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。

2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。 例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。

3. 运行状态(Running) : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。

4. 阻塞状态(Blocked): 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种: - 等待阻塞 > 通过调用线程的wait()方法,让线程等待某工作的完成。 - 同步阻塞 > 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。 - 其他阻塞 > 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5. 死亡状态(Dead): 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

6.Waiting等待状态

二、线程切换开销

线程间频繁切换,开销还是会很大的。

最显著的性能损耗是将保存寄存器中的内容在缓存失效(CPU高速缓存失效)后查找的过程比较慢,即页表格查找,页表查找是一个很慢的过程,因此通常使用Cache来缓存常用的地址映射,这样可以加速页表查找,这个cache就是TLB.当进程切换后页表也要进行切换,页表切换后TLB就失效了,cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢

以下是一个示例代码,用于演示如何在Java中实现线程状态相关的代码:

import java.util.concurrent.atomic.AtomicInteger;  
  
public class ThreadState {  
    private static final AtomicInteger counter = new AtomicInteger(0);  
  
    public static void increment() {  
        counter.incrementAndGet();  
    }  
  
    public static void decrement() {  
        counter.decrementAndGet();  
    }  
  
    public static int getCount() {  
        return counter.get();  
    }  
}

在这个示例代码中,我们定义了一个名为ThreadState的类,它包含了一个静态的AtomicInteger对象counter,用于记录线程的计数器值。在类中,我们提供了一个名为increment()的静态方法和一个名为decrement()的静态方法,分别用于递增计数器的值和递减计数器的值。另外,我们还提供了一个名为getCount()的静态方法,用于获取计数器的当前值。

increment()decrement()方法中,我们使用incrementAndGet()方法来递增计数器的值,并使用get()方法来获取计数器的当前值。这样,我们就可以在不同的线程中共享计数器的值,而不需要在每个线程中都创建一个新的计数器对象。

需要注意的是,由于AtomicInteger对象是线程安全的,因此我们可以在不同的线程中共享它的值,而不需要使用互斥锁或者同步器来进行线程同步。

需要注意的是,由于AtomicInteger对象是线程安全的,因此我们可以在不同的线程中共享它的值,而不需要使用互斥锁或者同步器来进行线程同步。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ShareSDK Google平台注册指南

注册开发者账号 访问Firebase,使用Google账号登录 创建项目 登录完成后,点击转到控制台 点击添加项目 输入项目名称,点击继续 根据需要选择是否开启Google Analytics(分析),点击继续 选择Google Analytic…

04 【Sass语法介绍-运算】

1.前言 运算是一种通过已知量可能的组合,获得新的量的行为。Sass 中也为我们提供了各种各样的运算,以便我们更好的处理样式代码。本节我们将学习 Sass 中的数字运算、关系运算、除法运算、颜色运算、字符串运算等等… 2.什么是 Sass 运算? …

ArcGIS Pro坐标系统

目录 1 测量学基础 1.1 地球的形状和大小 1.1.1 大地水准面 1.1.2 大地体 1.1.3 地球椭球 2 坐标系统 2.1 地理坐标系 2.2 投影坐标系 2.3 局部坐标系(假定坐标系) 2.4 高程坐标系 3 地图投影 3.1 投影概念 3.2 投影分类 3.3 投影类型 3.…

长按实现安卓端下载图片和安装包

①长按按钮保存图片至安卓手机相册 using System.Collections; using System.Collections.Generic; using UnityEngine;public class LongPress : MonoBehaviour {//设置变量记录触摸时间与bool触摸private float touchTime;private bool newTouch = false;void Update () {//判…

在线问诊小程序系统方案以及价值

方案价值zlzwgz0127 1.扩大医院流量 a.预约到院 在线展示专家的介绍,更能彰显实力,吸引患者来院就医, 用户可选择在线问诊和预约到院 b.社区团购导流 与我们合作社区团购给医院的体检产品导流 c.专家直播导流 通过专家直播吸引潜在患者…

( 哈希表) 1. 两数之和 ——【Leetcode每日一题】

哈希表使用 O ( N ) O(N) O(N) 空间复杂度存储数据,并且以 O ( 1 ) O(1) O(1) 时间复杂度求解问题。 ❓1. 两数之和 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数&am…

计算机网络【1】 TCP/IP

OSI七层模型与TCP/IP四层模型 首先简单说一下OSI参考模型,OSI将网络分为七层,自下而上分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,而TCP/IP体系结构则将网络分为四层,自下而上分别是网络接口层、网络层、…

如何冲破 GPT-4 的信息茧房?

由于大模型的成功经验,整个 AI 领域纷纷转向,要么是将模型架构换为 Transformer,要么是将小模型换为大模型,要么是将建模方式换为自监督、自回归范式等等。 GPT-4 推出后,各种 demo 充斥网络空间,写代码、…

论文投稿指南——如何让SCI论文英语更地道(细节掌握)

​ 学术论文英文写作都要符合ABC三个基本点:准确、简洁和清晰 (Accurate\Brief\Clear),在此基础上做好必要的细节,可以让你的英文写作更地道化、学术化。以下建议可供各位小伙伴参考: 一、错误用法 ★ So/But/And/Also…等连接词…

如何判定自己适合自学编程还是报班?

首先在这里,不做偏向性推荐,主要还是看个人条件。 宝剑锋从磨砺出,学习本身是一件艰苦的事情。在决定之前,建议先按照下图问自己三个问题自我检测。 如果你还不能确定,自学和报班的优劣势分析,或许能帮你们…

Spring JDBC和事务控制

目录 Spring JDBC 和 事务控制主要内容Spring 整合 JDBC 环境构建项目添加依赖坐标添加 jdbc 配置文件编写 spring 配置文件配置数据源C3P0 数据源配置DBCP 数据源配置 模板类配置Spring JDBC 测试 (入门)创建指定数据库创建数据表使用 JUnit 测试JUnit …

面试题30天打卡-day14

1、线程的生命周期是什么,线程有几种状态,什么是上下文切换? 线程通常有五种状态:创建,就绪,运行、阻塞和死亡状态。 新建状态(New):新创建了一个线程对象。就绪状态&am…

超赞的实用前端社区精选?

转载 作者:黑马程序员前端 链接:https://www.zhihu.com/question/39503897/answer/2998752442 社区精选 | 好的前端社区可以根据其特点和领域进行分类整理: 1. 问答社区 Stack Overflow(https://stackoverflow.com/&#xf…

【一起撸个DL框架】3 前向传播

CSDN个人主页:清风莫追 欢迎关注本专栏:《一起撸个DL框架》 文章目录 3 前向传播🥝3.1 前情提要3.2 前向传播:递归的forward方法3.3 再添乘法节点:搭建函数y2x13.4 小结 3 前向传播🥝 3.1 前情提要 上一篇…

vue - 实现对div的拖动功能

实现对div的拖动功能,需要先要知道以下的一些原生事件和方法; 1,事件: 方法描述onmousedown鼠标按钮被按下onmousemove鼠标被移动onmouseup鼠标按键被松开 2,方法: 方法描述event.clientX返回当事件被触发时鼠标指针相对于浏览…

基于elementplus 实现多级表格 最后一级展示图片

想要实现的效果 总共四级 前三级是表格 第四级使用图片展示; 看了一下官网 计划使用官网的树形结构, 但是发现并不能满足最后一个是图片形式的展示 最后利用了表格的expand; 在过程中主要需要解决的问题有:vue3 递归使用组件&am…

JavaScript题解2652.倍数求和|容斥原理

解题思路 在JavaScript中计算7/3*3,结果是7,而不是6。这是因为JavaScript中除法运算符(/)得到的结果是一个浮点数,而不是一个整数。 具体来说,7/3得到的结果是2.3333…,然后再乘以3得到7.0000…

辞了外包,上岸字节我落泪了,400多个日夜没人知道我付出了多少....

前言: 没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力幸运,但如果你不够幸运,那就只能拉高努力的占比。 2023年3月,我有幸成为了字节跳动的一名自动化测试工程师&am…

nacos搭建

1、查询对应的nacos版本 在pom.xml文件中,按住ctrl单击 spring-cloud-alibaba-dependencies 跳转到对应的页面,搜索nacos 2、下载软件nacos 官网:https://nacos.io/zh-cn/ 地址 https://github.com/alibaba/nacos/releases 这里我们根据我…

【架构】如何在微服务下保证事务的一致性

文章目录 背景一、事务的介绍1.1 事务1.1.1 事务的产生1.1.2 事务的概念1.1.3 事务的特性1.1.4 Mysql隔离级别1.1.5 启动事务 1.2 本地事务1.2.1 本地事务定义1.2.2 本地事务的缺点 二、分布式事务定义三、分布式事务-强一致性解决方案3.1 二阶段提交协议3.2 三阶段提交协议 四…