深入了解电脑硬件以及多线程编程

文章目录

    • 认识计算机硬件与多核CPU的工作原理
      • 单核CPU
      • 多核CPU
      • 并发与并行
    • 深入了解进程、线程及其优先级
      • 进程与线程
      • 线程的创建与命名
      • 线程的优先级与控制
      • 线程的休眠与等待
    • 线程安全与锁机制
      • 同步与异步
      • 线程安全问题与锁
      • 可重入锁解决线程安全问题
    • 多线程间的通信与线程池的使用
      • 线程通信与生产者消费者模型
      • 线程池的优势与使用

在这里插入图片描述

🎉欢迎来到Java学习路线专栏~深入了解电脑硬件以及多线程编程


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:Java学习路线
  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

在这里插入图片描述


认识计算机硬件与多核CPU的工作原理

计算机硬件,如内存、硬盘、CPU、显卡、声卡、网卡等,构成了现代计算机的基础。CPU被称为计算机的大脑,负责各种计算任务和控制操作。我们可以将多核CPU比作家庭的多位家庭成员,分工协作,提高效率:

单核CPU

单核CPU就像一个人,他需要做饭、洗碗、摘菜、拖地、洗衣服等所有家务活。这样的工作方式让人感到累并且效率低下。即使有些任务可以同时进行,但总体上仍然是按顺序一个一个来,导致工作效率低下。
在这里插入图片描述

多核CPU

多核CPU就像家庭中的多位成员,可以分工协作。一位成员负责做饭,另一位负责洗碗,另外两位可以同时摘菜和拖地。这样可以有效提高效率,让每个核心专注于不同的任务,共同完成工作。
在这里插入图片描述

并发与并行

在多线程编程中,我们经常遇到并发与并行的概念。并发是指多个任务交替执行,微观上是顺序执行,宏观上是看起来同时执行;而并行是指多个任务同时执行,微观上是高频切换,宏观上是真正的同时进行。例如,在代码中同时进行画图和播放音乐就是并行执行。
在这里插入图片描述

在这里插入图片描述


深入了解进程、线程及其优先级

进程与线程

进程是正在运行的程序,每个进程都有自己的内存空间和系统资源。线程是进程中的单个顺序控制流,是一条执行的路径。一个应用程序至少有一个线程。

线程的创建与命名

在Java中,创建线程有以下步骤:

  1. 定义一个类继承Thread,重写run()方法。
  2. 创建自定义类的对象。
  3. 启动线程,使用start()方法。

线程的名字可以通过setName(String name)方法设置,也可以通过构造方法进行设置,通过getName()方法获取。

线程的优先级与控制

线程的优先级可以通过setPriority(int newPriority)方法进行调整,默认优先级为5。优先级较高的线程在抢占式调度中更有可能获取资源。

线程的休眠与等待

线程可以通过sleep(long millis)方法进行休眠,使线程暂停执行一段时间。而join()方法可以使一个线程等待另一个线程执行完毕。
在这里插入图片描述


线程安全与锁机制

在这里插入图片描述

同步与异步

在多线程编程中,同步是按顺序一个一个来,而异步是无序的,可以同时有多个任务进行。这就好比公交车,同步是乘客一个一个上车,异步是挤上车的情况。

线程安全问题与锁

线程安全问题在多线程共享资源时会出现,比如多个窗口同时卖票。为了解决这个问题,我们可以使用锁机制。锁分为同步代码块和同步方法两种方式,可以避免多线程对共享资源的争夺。

可重入锁解决线程安全问题

通过可重入锁(ReentrantLock)可以更灵活地控制线程的锁定和解锁。使用Lock对象的lock()方法上锁,unlock()方法解锁。
在这里插入图片描述


多线程间的通信与线程池的使用

在这里插入图片描述

线程通信与生产者消费者模型

在多线程编程中,线程通信是一个重要的问题,特别是在处理同一资源时。生产者消费者模型是一个典型的案例,其中生产者负责生产资源,消费者负责消费资源,需要通过等待(wait)、唤醒(notify)和唤醒所有(notifyAll)等方法来实现线程间的协调。

线程池的优势与使用

线程池可以降低资源消耗、提升响应速度和增加线程的可管理性。通过Executors工具类可以方便地创建线程池,使用submit方法来执行线程任务。线程池的工作原理是通过任务队列对线程进行管理,合理利用线程资源。


🧸结尾


❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战<一>:打造高效便捷的企业级Java外卖订购系统

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-Perl - select函数

描述 此函数将输出的默认文件句柄设置为FILEHANDLE,如果未指定文件句柄,则设置由print和write等功能使用的文件句柄。如果未指定FILEHANDLE,则它将返回当前默认文件句柄的名称。 select(RBITS,WBITS,EBITS,TIMEOUT)使用指定的位调用系统功能select()。 select函数设置用于处理…

每天一道leetcode:1129. 颜色交替的最短路径(图论中等广度优先遍历)

今日份题目: 给定一个整数 n,即有向图中的节点数,其中节点标记为 0 到 n - 1。图中的每条边为红色或者蓝色,并且可能存在自环或平行边。 给定两个数组 redEdges 和 blueEdges,其中: redEdges[i] [ai, bi…

创建Azure资源锁

锁的介绍 在Azure中,资源锁是一种用于保护订阅、资源组或者单个资源的机制。它可以防止对受锁定的资源进行删除或修改操作,帮助确保资源的连续可用性和安全性。 Azure中的资源锁可以分为两种类型: 删除锁(CanNotDelete&#xf…

el-table自适应缩放大小

安装依赖 npm install --save vue-draggable-resizable //或 cnpm install --save vue-draggable-resizablemain.js引入依赖 import VueDraggableResizable from vue-draggable-resizable import "vue-draggable-resizable/dist/VueDraggableResizable.css"; Vue.c…

linux中的/dev/null

1.什么是/dev 在 Linux 上,从驱动程序到设备的所有内容都可以作为文件进行访问。/dev/ 是包含所有物理和虚拟设备的目录。例如,/dev/sda 可能是您的主硬盘驱动器,/dev/sdb 可能是您现在正在使用的笔记本驱动器的文件。这就是您在 Linux 中访问…

原子css 和 组件化css如何搭配使用

如果让你来实现下面这种页面,该怎么实现呢 原子化和css组件化方式写法,可以搭配起来使用,常用的css 原子css 比如 下面这些类似flex 布局,lstn curser-pointer 等常用的或者 具备一定规律性的padding margin 样式可以抽取为单独…

KubeSphere 部署 Zookeeper 实战教程

前言 知识点 定级:入门级如何利用 AI 助手辅助运维工作单节点 Zookeeper 安装部署集群模式 Zookeeper 安装部署开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.9…

【maven】通过profiles实现:怎样激活某个仓库、同时加载多个profile、不同环境加载不同依赖jar

文章目录 一. 基本用法二. 仓库激活方式1. 使用activeProfile激活2. 使用-P参数激活3. 使用-P参数不激活 三. 查看激活的仓库四. 不同环境依赖不同版本的jar Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不…

【elementUi】绘制自定义表格、绘制曲线表格

要求绘制下图系列表格: 实现步骤: 1.绘制树,实现树勾选字段—>表格绘制字段 逻辑: 树:check-change“treeChart.handleCheckChange” 绑定点击选择事件,改变data.column3数据项;表格:columns"data…

问AI一个严肃的问题

chatgpt的问世再一次掀起了AI的浪潮,其实我一直在想,AI和人类的关系未来会怎样发展,我们未来会怎样和AI相处,AI真的会完全取代人类吗,带着这个问题,我问了下chatgpt,看一看它是怎么看待这个问题…

图解WebSocket

👏作者简介:大家好,我是爱写博客的嗯哼,爱好Java的小菜鸟 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝个人博客:敬请期待 文章目录 前言一、…

【量化课程】02_4.数理统计的基本概念

2.4_数理统计的基本概念 数理统计思维导图 更多详细内容见notebook 1.基本概念 总体:研究对象的全体,它是一个随机变量,用 X X X表示。 个体:组成总体的每个基本元素。 简单随机样本:来自总体 X X X的 n n n个相互…

asp.net core webapi如何执行周期性任务

使用Api执行周期性任务 第一种,无图形化界面1.新建类,继承IJob,在实现的方法种书写需要周期性执行的事件。2.编写方法类,定义事件执行方式3.在启动方法中,进行设置,.net 6中在program.cs的Main方法中&#…

c51单片机串行通信示例代码(单片机--单片机通信)(附带proteus线路图)

//这个发送端代码 #include "reg51.h" #include "myheader.h" #define uchar unsigned char long int sleep_i0; long int main_i0; void main() {uchar sendx[6]{2,0,2,3,8,1};sleep(2000);TMOD0x20;TH10XF4;//根据波特率计算公式这里需要设置为这么多才能…

对自定义表格数据设计自定义查询/汇总

目录 1 前言 2 生成数据 3 设计一个汇总 4 试一下效果 5 导出为excel文件的源代码 6 后记 1 前言 对自定义表格中录入或者导入的数据,必须能定义查询和汇总,否则程序基本没什么用。就是说,程序应该具备对任意表格进行方便的查询汇总公式…

DatawhaleAI夏令营第三期机器学习用户新增预测挑战赛baseline新手教程

本教程会带领大家项目制学习,由浅入深,逐渐进阶。从竞赛通用流程与跑通最简的Baseline,到深入各个竞赛环节,精读Baseline与进阶实践技巧的学习。 千里之行,始于足下,从这里,开启你的 AI 学习之旅…

预训练GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks

一.文章概述 本文提出了一种自监督属性图生成任务来预训练GNN,使得其能捕图的结构和语义属性。作者将图的生成分为两个部分:属性生成和边生成,即给定观测到的边,生成节点属性;给定观测到的边和生成的节点属性&#xf…

01:STM32点灯大师和蜂鸣器

目录 一:点亮1个LED 1:连接图 2:函数介绍 3:点灯代码 二:LED闪烁 1:函数介绍 2:闪烁代码 三:LED流水灯 1:连接图 2:函数介绍 3:流水灯代码 四:按键控制LED 1:电路图 2:连接图 3:函数介绍 4:按键控制LED代码 五:蜂鸣器 1:连接图 2:蜂鸣器代码 六:光敏电阻控制…

pywinauto结合selenium实现文件上传

简介 PC端-Windows上的元素识别可用viewWizard工具 PC端-Windows上的元素操作可用pywinauto库 浏览器上网页的元素识别可用selenium 安装 pip installer pywinauto 使用须知 pywinauto官方文档 确定app的可访问技术 1、win32 API(backend“win32”) 一般是MFC、VB6、VCL…

07_Hudi案例实战、Flink CDC 实时数据采集、Presto、FineBI 报表可视化等

7.第七章 Hudi案例实战 7.1 案例架构 7.2 业务数据 7.2.1 客户信息表 7.2.2 客户意向表 7.2.3 客户线索表 7.2.4 线索申诉表 7.2.5 客户访问咨询记录表 7.3 Flink CDC 实时数据采集 7.3.1 开启MySQL binlog 7.3.2 环境准备 7.3.3 实时采集数据 7.3.3.1 客户信息表 7.3.3.2 客户…