基础篇(原理)--- 多线程

Zemax操作33--5倍激光扩束器 5倍扩束 阅读详情

目录

基本概念

使用多线程的优缺点

内存可见性和关键字

原子变量与CAS算法

多线程锁

实现方式

线程通信方式

线程调度

 


基本概念

    进程

      进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动

      一个程序进入内存运行,即变成一个进程。进程是处于运行过程中的程序,并且具有一定独立功能

      操作系统中,几乎所有运行中的任务对应一条进程,进程是系统进行资源分配和调度的一个独立单位

      进程是系统中独立存在的实体,拥有自己独立的资源,拥有自己私有的地址空间,是资源分配的最小单位

      进程具有并发性,它可以同其他进程一起并发执行,一个进程可以包含多个线程

    线程

      线程有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元

      同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小

      线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程

    并行

      多个CPU实例或者多台机器同时执行一段处理逻辑,是真正的同时

    并发

      通过CPU调度算法,让用户看上去同时执行,实际上从CPU操作层面不是真正的同时

    总结

      进程和线程的主要差别在于它们是不同的操作系统资源管理方式

      一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮

      一个程序至少有一个进程,一个进程至少有一个线程

使用多线程的优缺点

    优点

      可以更好的利用CPU的资源,提高程序的响应速度和效率

      可以用多个简单的线程完成复杂的逻辑,就像多个人共同解决一件事情一样

      创建一个新线程的代价要比创建一个新进程小的多

      可使一些复杂的运算分给多个线程分别运算,使程序简单高效

    缺点

      多线程并发时会产生资源争夺,没有处理好会造成死锁,对程序影响很大

      多线程访问同一个变量会造成变的值得改变超出预期

      线程中止没处理好的话会对程序运行造成影响

      对线程进行管理要求额外的 CPU开销,线程过多反而影响性能效率

内存可见性和关键字

    概念

      内存可见性是指在多线程访问共享变量时,一个线程对共享变量做修改时,能够及时的被其它线程看到

      线程对共享变量的所有操作都必须在自己的工作内存中,里面的内容拷贝于主存,共享变量存在主内存中

      不同线程之前工作内存中的变量不能相互访问,不同线程间的值传递主要通过主存来完成

    原理

      内存可见性就是把不同工作内存中的共享变量刷新到主存中,再通过主存把共享变量更新到其它工作内存中

    关键字

      synchronized和volatile,前者具有原子性和一致性,后者是一种较为轻量级的同步策略,点击查看原文

原子变量与CAS算法

    原子变量保证了该变量的所有操作都是原子的,不会因为多线程的同时访问而导致脏数据的读取问题

    Java提供的有原子类型,比如Integer的原子类型为AtomicInteger,这个类型可以保证线程安全

    CAS(Compare-and-Swap)比较并替换,是并发中常用到的技术,点击可查看其他博主的讲解

多线程锁

    闭锁

      闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行

    隐式锁

      synchronized,可用余同步代码块或同步方法

    显示锁

      Lock,用在方法里面,需要通过lock()方法上锁,必须通过unlock()方法释放锁

实现方式

  • 集成Thread类创建多线程
  • 实现Runnable接口创建多线程
  • 实现Callable接口通过FutureTask包装器来创建Thread线程
  • 通过线程池创建多线程

线程通信方式

  • 传统线程通信synchronized + wait + notify
  • 使用Condition控制线程通信lock + condition + await + signal
  • 使用阻塞队列(BlockingQueue)控制线程通信

线程调度

 

 

使用Microsoft Print to PDF进行编程:创建PDF文件的简单方法 Microsoft Print to PDF是一种内置于Windows操作系统中的功能,它允许我们通过打印操作将任何可打印的内容保存为PDF文件。然后,我们使用Microsoft Print to PDF打印机进行打印操作,并将输出文件保存为指定的PDF文件。使用Microsoft Print to PDF功能是一种方便且简单的方法来创建PDF文件,无论是在个人使用还是在企业开发中,它都可以提供良好的支持和灵活性。请注意,如果你使用的是其他编程语言,你可以根据相应的打印机接口或库来实现类似的功能。 阅读详情

相关推荐

机器学习第四个算法ANN(人工神经网络)

我是在14年9月刚读研的时候听到一个说法叫“类人脑算法”很火热,之后搞了很长一段时间相关的蓄水池算法等,但大都没有摸到门路而中途放弃了。现今看来,还是缺少一些知识背景,也不善于在网络上学习,随时间推移,也逐渐明白这是机器学习的一小部分,并且逐渐发展的名称叫做人工神经网络的算法,如果网络层较多,又会有个别名,叫做深度学习。其中个用到的最著名的算法是背向传输算法(backpropagation),而这个

legalhighhigh的博客 1万+

一文搞懂Java的多线程底层逻辑,再也不怕多线程了

一文搞懂Java的多线程底层逻辑,再也不怕多线程了

我是香菜 3122

告别手动改代码!用SSC工具5分钟搞定EtherCAT从站动态模块配置(含Excel模板)

本文详细介绍了如何利用SSC工具和Excel模板实现EtherCAT从站动态模块配置的自动化流程。通过零代码修改的动态配置方案,大幅提升工业自动化产线的灵活性和效率,配置时间从平均4小时缩短至8分钟,错误率下降96%。文章包含Excel模板设计、实战演示和避坑指南,助力工程师快速掌握这一高效工具。

weixin_28339967的博客 568

多线程(1): 线程的创建、回收、分离

多线程在项目开发过程中使用频率非常高,因为使用多线程可以提高程序的并发性。(1)多线程2)多进程。但是多线程对系统资源的消耗会更加少一些,并且线程和进程执行效率差不多。在执行系统应用程序时,应用程序需要占用cpu资源,电脑上cpu核是有限的, 假设PC上有8核CPU,但同时执行了100个应用程序。为什么看起来这100个执行程序可以同时运行呢?这其实是一个假象,cpu会把单位时间分为若干份,每一份就是一个cpu时间片,cpu每个时间片很短,是纳秒级别。

@bangbang的博客 1078

7.19华为OD机试真题 新系统 - 物流仓储多维度成本利润综合查询系统 (Java/Py/C/C++/Js/Go)

7.19华为OD机试真题 新系统 - 物流仓储多维度成本利润综合查询系统 (Java/Py/C/C++/Js/Go)

算法大师! 616

【人脸识别】基于 Gabor+SVM和PCA+SVM实现人脸识别matlab源码含 GUI

1 简介 随着经济的快速发展,互联网的普及,信息安全逐渐被人们所重视。人脸识别技术作为保护信息安全的重要手段之一,也逐渐被研究学者所重视。人脸识别作为计算机视觉技术和生物特征识别技术的一个重要分支,模式识别与人工智能的一个重要领域,其主要任务是对静态图像或动态视频进行识别。如何快速的正确的对人脸进行识别是目前人脸识别课题的一个难题。人脸识别算法的选取直接关系到人脸识别的识别率。 本文首先介绍了国内外人脸识别的发展现状,并对人脸图像预处理方法进行了详细阐述。图像预处理的方法有很多,主要包括:灰度变换、图像锐

qq_59747472的博客 1136

一文讲清多线程和多线程同步

一个进程内多个线程并发执行的情况就叫多线程,每个线程是一个独立的执行流,多线程是一种编程模型,它与处理器无关、跟设计有关。并行计算:充分利用多核,提升整体吞吐,加快执行速度。后台任务处理:将后台线程和主线程分离,在特定场景它是不可或缺的,如:响应式用户界面、实时系统等。我们用2个例子作说明。

weixin_38687619的博客 942

瑞芯微RK3588/RK3576平台采集BT1120(fpga)驱动调试记录

本文介绍了在RK3576/RK3588平台上采集FPGA传输的BT1120数据的方法。主要内容包括:1)硬件连接需确认管脚复用和图像格式(通常为uyvy_2x8);2)设备树配置要点,如I2C总线设置、BT1120模式指定等;3)驱动适配注意事项,包括时钟极性、分辨率格式等关键参数;4)测试方法,通过media-ctl和v4l2-ctl工具验证数据采集。文中特别指出RK3576和RK3588配置的通用性,并提供了常见问题的排查思路。

bingdund的博客 913

使用多线程处理逻辑

@GetMapping("/order") public Callable order(){ Callable callable = new Callable() { @Override public UserTest call() throws Exception { logger.info(“副线程开始”); Thread.sleep(1000); UserTest usr = new Use...

qq_34716528的博客 326

[ 虚拟专用网 ] IPsce 虚拟局域网(安全的IP协议的虚拟专用网)详解(二) --- 安全联盟SA

???? 博主介绍 ????‍???? 博主介绍:大家好,我是_PowerShell,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 ????点赞➕评论➕收藏 == 养成习惯(一键三连)???? ????欢迎关注????一起学习????一起讨论⭐️一起进步????文末有彩蛋 ????作者水平有限,欢迎各位大佬指点,相互学习进步! 目录 ???? 博主介绍 一、什么是安全联盟 二、协商参数两种方式:(手动、IKE) 1. 手动 2.

qq_51577576的博客 2801

微信终于支持“多设备同时在线”?我用 NAS + Docker 搭了一个云端微信系统,多端共享24小时在线

通过Docker 容器,将微信运行在云端并通过浏览器访问,实现多设备共享同一微信会话 📱。本文详细介绍完整部署流程、docker-compose 配置及资源控制方案,让微信变成“可访问的云桌面应用” ✨

XiaoqiangClub的博客 869

Java基础篇多线程概念和使用原理分析

转载自:http://blog.yoodb.com/yoodb/article/detail/1330 首选了解一下什么是进程和线程的概念? 进程是运行中的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以启动多个线程,而线程是指进程中的一个执行流程,也可以理解成一段代码。比如java.exe进程中可以运行很多线程,线程永远属于某个进程,进程中的多个线程共享进程的内存。在Java中为了创

Java精选 1699

UI自动化控制PC端微信获取当前群聊的群友列表

在一个月前,某个群友在获取整个群的群友信息时遇到了一点问题: 对整个群进行群友数据获取经测试确实有点棘手,下面我将我的解决过程公布给大家。 基础教程详见: https://blog.youkuaiyun.com/as604049322/article/details/121391639 人工打开要抓取的群聊窗口后,首先获取微信窗口并点击聊天信息按钮: import uiautomation as auto auto.uiautomation.SetGlobalSearchTimeout(1) wechatWind

小小明-代码实体的专栏 3万+

【多线程编程】CompletableFuture 使用指南(基础篇):从原理到 API

【多线程编程】CompletableFuture 使用指南(基础篇):从原理到 API

hiliang521的博客 1103

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

2024最强Java面试八股文(精简、纯手打)

2024最新最全国内大厂Java面试高频题库 本小册内容涵盖:Java基础,JVM,多线程,数据库(MySQL/Redis)SSM,Dubbo,网络,MQ,Zookeeper,Netty,微服务,大数据,算法,项目,设计模式等,篇幅足足近2千页,大家面试前拿去提前刷刷,肯定能对你们有很大帮助!

BASK2311的博客 6558

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

多线程系列 - 基础篇02 - 同步的原理 及 锁在应用层的优化思路 60%

转载自并发编程网 – ifeve.com本文链接地址:聊聊并发(二)Java SE1.6中的Synchronized 1.synchronized实现同步的基础: ①: 对于普通方法,锁是当前实例对象; ②:对于静态同步方法,锁是class对象。 ③:同步方法块,锁是synchronized后面括号里的对象。 当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释...

weixin_30594001的博客 85

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【无标题】JAVA+多线程+JVM

反射是通过获取类的class对象,然后动态的获取到这个类的内部结构,动态的去操作类的属性和方法。应用场景有:要操作权限不够的类属性和方法时、实现自定义注解时、动态加载第三方jar包时、按需加载类,节省编译和初始化时间;获取class对象的方法有:class.forName(类路径),类.class(),对象的getClass()当一个线程被剥夺cpu使用权时,切换到另外一个线程执行死锁指多个线程在执行过程中,因争夺资源造成的一种相互等待的僵局。

SoulDiscoDog的博客 103

多亏阿里学长的这份Java多线程笔记,让我轻松拿下阿里一面

内推进阿里,面试之前阿里学长给了一份Java多线程笔记,让我轻松拿下阿里一面。 以下这些技术点都是阿里学长的全解析笔记中总结的内容: 笔记内容介绍: 由于笔记内容过多,因此为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的看文末有免费的获取方式! 基础篇 进程与线程基本概念 Java多线程入门类和接口 线程组和线程优先级 Java线程的状态及主要转化方法 Java线程间的通信 原理篇 Java内存模型基础知识 重排序与hap...

Java6888的博客 228

Java-多线程技术学习线路

前言今日整理多线程学习的路线,供想学习多线程的同学参考,可以沿着这个线路由浅入深对多线程技术做全面了解,篇幅较长,耐心点看完,上菜咯。

fdg277137601的专栏 625

Java多线程和并发编程实践的学习心得----基础篇3

Java多线程和并发编程实践的学习心得----基础篇3

SunnyAndroider专栏 1286

【Java】4万字解读Java多线程,这一篇文章就够了

所谓的不公平锁就是多个线程抢锁是一拥而上的,谁抢到是谁,这样会造成某个线程可能会一直抢锁成功,某个线程会一直抢不到锁,对于线程层面的执行时不公平的。当多个线程在竞争执行同一块代码时,因为有 synchronize 的存在,所以所有的线程都会去查看 locker 的指定位置是否已经被填充了信息,如果没有被填充信息,那么线程就会尝试填充自己的信息,填充自己信息的线程就是获取锁成功的线程,其他线程会不断的检查并竞争 locker 对象,知道将自己的信息填充到 locker 的指定位置,自己采拿回了代码的执行权。

✈ 正在努力 の 寒江(StudiousTiger) ✌ 呐 ✈ 1697

腾讯p8——基础的天花板也不过如此,太强了

基础不牢,地洞山摇。一个痛所以懂得道理,就比如想要建成高楼大厦,必需基础牢固,但是道理我们都懂,实际操作起来真是那么回事吗? 我在闲逛各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,就根据这个问题咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好,他山之石,可以攻玉,多看多借鉴还是有帮助的,刚好这次腾讯也在疯狂招人!肝完这份八股文,38K不是问题! 这份总结内容涵盖极广,包含了 11个技术章节。 包括 Java基础能力篇,IO流,反射机制篇,注解篇,多线程篇,函数式编

weixin_42097508的博客 2221

【Java基础篇】Java面试题总结

Java面试题总结

wang_qiu_hao的博客 1157

javaSE(基础 集合 多线程)

java基础知识面试题,包含了java基础,java集合,以及java多线程的面试题的汇总.

pqy的博客 2304

我看谁还在瞎卷?阿里多位大咖级联合撰写的 Java 多线程笔记,只讲重点

程序员这个行业持续学习已经成为了常态,去大厂镀金可以为你的履历增光添彩,但更重要的是在大厂你能学到更多的东西,这才是你以后和别人竞争工作岗位的保障。

Q54665642ljf的博客 83
上一篇: 基础篇(原理)--- 堆栈知识
下一篇: 工具篇(Oracle)---常用脚本
Coder_Light
博客等级 码龄9年 30粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值