java并发编程原理-----线程

目录

上下文切换

java代码创建线程的两种方式

线程的五个状态

线程join方法

多线程之间的影响


上下文切换

CPU的每一个核心同一时刻只能执行一个线程,但是我们会发现电脑同一时刻现实会进行几千个线程,这就是cpu在快速的切换执行线程,由操作系统进行选择要执行的线程

先是操作系统进行决定要执行那个任务,然后再交给CPU

线程执行达到操作系统分配的时间之后,会保存当前的执行状态,从任务保存到下次在加载的过程是一次上下文切换

任务之间的切换是有额外的时间开销的,这个开销不会到一毫秒

java代码创建线程的两种方式

一种是继承接口,一种是new出来

public class Demo2 implements  Runnable{@Overridepublic void run() {for(;;){System.out.println("t2");}}
}
public class Test {public static void main(String[] args) {Thread t1 = new Thread(){@Overridepublic void run() {for (;;){System.out.println("t1");}}};Runnable x = new Demo2();Thread t2 = new Thread(x);t1.start();t2.start();for(;;){System.out.println("主线程");}}
}

线程的五个状态

  1. 新建状态(New):线程对象创建之后,但还没有开始执行。

  2. 就绪状态(Runnable):线程已经创建并且可以执行,但还没有获得CPU执行的机会。

  3. 运行状态(Running):线程正在执行任务。

  4. 阻塞状态(Blocked):线程暂时停止执行,因为它正在等待某个条件的发生(例如等待输入/输出完成、等待锁资源等)。

  5. 死亡状态(Dead):线程执行完其任务或被提前终止,进入结束状态。

细分为七种状态

线程执行的时候,什么时候执行和被分配到多少时间片都是不确定的,在windows中一般一次分配的时间是几毫秒到几十毫秒

线程join方法

加入了join方法后,线程A在执行到join方法的位置时会暂停,并等待线程B执行完毕后再继续执行。这样可以保证线程B的执行完成后,线程A再开始执行后面的代码。

如果两个线程都加上了join方法,它们之间的执行顺序不受对方的影响。它们会交替执行,具体的执行顺序取决于线程调度器的调度策略,以及线程的优先级设置。

需要注意的是,如果代码较短,在一个时间片内就执行完毕的情况下,可能不会明显地看到两个线程的交替执行。因为线程切换的时间损耗可能相对较大,而代码执行时间很短,线程可能会在很短的时间内执行完毕。

另外,join方法还可以传入一个可选的超时参数,指定等待的最长时间,如果超过该时间线程B还没有执行完毕,线程A会继续执行后续代码。

总而言之,使用join方法可以控制线程的执行顺序,确保某个线程在另一个线程执行完毕后再继续执行。但最终的执行顺序还是由线程调度器来决定,而且多线程的实际执行结果可能是不确定的,需要注意处理线程间的同步与共享资源的访问问题。

多线程之间的影响

多线程之间的影响可以包括以下几个方面:

  1. 竞争条件(Race Condition):当多个线程同时访问和修改共享数据时,由于执行顺序的不确定性,可能导致数据的不一致性。这种情况下,最终的结果可能与预期不符。

  2. 死锁(Deadlock):多线程程序中,如果线程之间存在循环等待资源的情况,就可能导致死锁。当发生死锁时,线程无法继续执行,导致程序无法正常运行。

  3. 数据竞争(Data Race):当多个线程同时读写共享数据时,可能会出现数据竞争的情况。如果没有正确的同步机制来保护共享数据,就可能导致数据的不确定性和错误。

  4. 上下文切换开销:多线程之间的切换需要保存和恢复线程的上下文信息,这个过程会带来一定的开销。当线程数量增多时,频繁的上下文切换可能会导致系统性能下降。

  5. 资源消耗:多线程程序可能会占用更多的系统资源,包括内存、CPU等。如果线程数量过多,可能会导致系统资源不足,影响整体性能。

为了避免多线程之间的影响,可以采取以下措施:

  1. 使用同步机制:例如互斥锁、信号量等,来保护共享数据的访问,避免竞争条件和数据竞争的发生。

  2. 避免死锁:设计合理的资源分配和释放策略,避免线程之间出现循环等待资源的情况。

  3. 使用线程安全的数据结构和算法:选择适合多线程环境的数据结构和算法,避免数据竞争和不一致性。

  4. 合理控制线程数量:根据实际需求和系统资源情况,控制线程的数量,避免过多的线程导致性能下降和资源消耗过大。

  5. 考虑使用线程池:通过线程池管理线程的创建和销毁,可以降低线程创建和上下文切换的开销,提高系统性能。

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

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

相关文章

最早做「行业化」安全托管MSS的厂商,现在怎么样了?

科技云报道原创。 1家三甲医院,4个院区,9万台终端,数千台服务器,只配备1个安全运营人员,换做任何一家企事业单位都不敢想象,但武汉某医院却实现了7*24小时的自动化监测响应,所有威胁均可在1小时…

基础篇--初识STM32

初识STM32 STM32是什么 ST:意法半导体 M:MCU/MPU32:32位 ST累计推出了:5大类、18个系列、1000多个型号的Cortex内核微控制器 STM32芯片分类 ST中文社区网:https://www.stmcu.org.cn/ ST官网:https://www.st.com …

【从零开始学习CSS | 第一篇】选择器介绍

目录 前言: 选择器介绍: 各类选择器: 总结: 前言: 本文以及后续几篇文章我们将会集中介绍CSS中的常见选择器,选择器的出现可以让我们实现对具体的元素标签进行定制,因此我们要掌握好各类选择…

python+unittest+requests+HTMLRunner搭建接口测试框架,执行用例请求多个不同请求方式的接口

问题描述: 搭建接口测试框架,执行用例请求多个不同请求方式的接口 实现步骤: ① 创建配置文件config.ini,写入部分公用参数,如接口的基本url、测试报告文件路径、测试数据文件路径等配置项 1 [DATABASE] 2 data_addre…

蚂蚁集团开源可信隐私计算框架「隐语」:开放、通用

7 月 4 日,蚂蚁集团宣布面向全球开发者正式开源可信隐私计算框架 “隐语”。 隐语是蚂蚁集团历时 6 年自主研发,以安全、开放为核心设计理念打造的可信隐私计算技术框架,涵盖了当前几乎所有主流隐私计算技术。 据介绍,隐语内置 MPC、TEE、同态等多种密态计算虚拟设备,提…

爱尔四川眼科医院—四川大学华西联盟医院隆重揭牌

为积极响应国家“健康中国”“创新发展”战略,全面深化“产教融合”、“校企合作”、“医工融合”,推动“名校名企” 双赢合作,提升中国眼科领域人才核心竞争力,继2021年9月23日四川大学与爱尔眼科战略合作签约后,2023…

【数据结构】排序:插入排序与希尔排序详解

本章开始就要分享一些常用的排序方法,我们的日常生活中很多地方都要使用排序,比如电商平台可以按照你的需求进行排序,或者是你想了解大学的综合排名时 我们之前也学到过一些简单的排序比如冒泡排序,虽然他在时间复杂度上可以说是依…

苹果APP安装包ipa如何安装在手机上

苹果APP的安装比安卓复杂且困难,很多人不知道如何将ipa文件安装到手机上。以下是几种苹果APP安装在iOS设备的方式,供大家参考。 一、上架App Store 这是最正规的方式。虽然审核过程复杂、时间较长,且审核条件较为苛刻,但借助第三…

虚拟IP绑定公网IP访问

绑定公网 IP 我们目前的虚拟 IP,还不能通过公网的形式进行访问,我们首先,来使用内部的 IP 进行访问看看效果如下: curl 虚拟IP 如上图我访问了两次,第一次访问返回的是 2222 的 nginx,第二次访问是 1111 的…

Linux——sigaction信号捕捉函数

目录 一.sigaction () ; struct sigaction结构体的成员: sigaction()和signal()函数的区别: 二.sigaction函数的使用 sigaction函数使用案例1: 对该进程发送指定的信号 案例2:对该进程发送多个同类型的信号时: …

github 最简单的使用步骤(个人学习记录~)

github 使用步骤: (11条消息) github新手用法详解(建议收藏!!!)_github详解_怪 咖的博客-CSDN博客 1.获取ssh密钥 打开输入:ssh-keygen -t rsa -C “git账号” 输入之后一路Enter&#xff08…

MySQL自治平台建设的内核原理及实践(下)

本文整理自美团技术沙龙第75期的主题分享《美团数据库攻防演练建设实践》,系超大规模数据库集群保稳系列(内含4个议题的PPT及视频)的第4篇文章。 本文作者在演讲后根据同学们的反馈,补充了很多技术细节,跟演讲&#xf…