全网最全讲的最详细的多线程原理

chatgpt/2023/9/26 13:58:19

在我们开始讲多线程之前,我们先来了解一下什么是进程,什么是线程。进程和线程是操作系统中两个容易混淆的概念。

进程

在Windows操作系统中打开任务管理器,可以查看进程和线程的详细信息。也可以使用专业的进程查看小软件——Process Explorer来查看系统中的进程和线程,如下图所示:
在这里插入图片描述
在Windows操作系统中,进程被分为后台进程和应用进程两类。大部分后台进程在系统开始运行时被操作系统启动,完成操作系统的基础服务功能。大部分应用进程主要由用户启动,完成用户所需要的具体应用功能,比如听音乐、社交聊天、浏览网站等。

在操作系统(第4版)中,对进程的定义描述:所谓”进程“,是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调度的独立单位;简单来说,进程是程序的一次启动执行。

程序是一个在时间上严格有序的指令集合;简单来说,程序是存放在硬盘中的可执行文件,主要包括代码指令和数据。进程是程序的一次启动和执行,是操作系统将程序装入内存,给程序分配必要的系统资源,并且开始运行程序的指令。

进程是程序的一次执行过程,程序是进程赖以存在的基础。同一个程序可以多次启动,对应多个进程。

一般来说,一个进程由程序段、数据段和进程控制块三部分组成,如下图所示:

在这里插入图片描述

线程

随着计算机的发展,CPU的性能越来越高,线程的出现主要是为了充分发挥CPU的计算性能,提升CPU的硬件资源的利用率,同时弥补进程调度过于笨重产生的问题。

线程是指“进程代码段”的一次的顺序执行流程。进程是操作系统资源分配的最小单元,而线程是CPU调度的最小单位。

Java程序的进程执行过程就是标准的多线程的执行过程。每当使用Java命令执行一个class类时,实际上就是启动了一个JVM进程。理论上,在该进程的内部至少会启动两个线程,一个main线程,另一个是GC(垃圾回收)线程。如下图所示:

在这里插入图片描述
一个标准的线程主要由三部分组成,即线程描述信息、程序计数器(Program Counter,PC)和栈内存,如下图所示:

在这里插入图片描述

THread类

一个线程在Java中使用一个Thread实例来描述。Thread类是Java语言一个重要的基础类,位于java.lang包中。

线程的启动、运行、调度和生命周期管理高度依赖于操作系统,java本身不具备与底层操作系统交互的能力。因此线程的底层操作都使用了native方法,在创建Thread类实例,首先会执行registerNatives()方法调用函数库的底层线程注册方法,源码如下:

 private static native void registerNatives();static {registerNatives();}

线程池

ThreadLocal

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

深入了解 Influx:时序数据库的力量

引言 时序数据是按照时间顺序进行记录和存储的数据,广泛应用于物联网、金融、监控和日志分析等领域。例如,传感器数据、股票价格、服务器日志等都是时序数据。 InfluxDB 是一个专为处理时序数据而设计的高性能、分布式的开源时序数据库。它具有快速的写入…

从 0 到 1!得物如何打造通用大模型训练和推理平台

1.背景 近期,GPT 大模型的发布给自然语言处理(NLP)领域带来了令人震撼的体验。随着这一事件的发生,一系列开源大模型也迅速崛起。依据一些评估机构的评估,这些开源模型大模型的表现也相当不错。一些大模型的评测情况可…

多重背包三队列优化的理解以及代码记忆:

首先是多重背包得一维朴素版本(除了完全背包和多重背包得队列优化都是从大到小): 通过这个执行过程我们发现这个是分类更新得,可以按照余数是进行更新,而且物品数量最多有三件,物品数量决定了窗口的宽度所…

day57|● 647. 回文子串 ● 516.最长回文子序列

647. 回文子串 https://leetcode.cn/problems/palindromic-substrings/solution/by-lfool-2mvg/ Given a string s, return the number of palindromic substrings in it. A string is a palindrome when it reads the same backward as forward. A substring is a contiguous…

【188】Java8利用AVL树实现Map

AVL树又被叫做平衡二叉搜索树、平衡二叉树。AVL是其发明者的首字母缩写。 这篇文章中,AVLTreeMap 类集成了 java.util.Map 接口,并利用 AVL 树结构实现了 Map 接口的所有方法。本文还给出了测试代码。 为什么要发明AVL树? 当我按照从小到大…

idea 安装 插件jrebel 报错LS client not configured.

这个报错找了好久,有博主说版本不对,我脑子没反应过来以为是随便换一个低版本的就行,没想到只能是2022.4.1 这个版本才行 一定要用jrebel 2022.4.1的插件版本!!!!! 插件下载地址&…

HDFS Erasure coding-纠删码介绍和原理

HDFS Erasure coding-纠删码介绍和原理 三副本策略弊端Erasure Coding(EC)简介Reed- Solomon(RS)码 EC架构 三副本策略弊端 为了提供容错能力,hdfs回根据replication factor(复制因子)在不同的…

面试典中典之线程池的七大参数

文章目录 一、七大元素解释1.corePoolSize(核心线程数):2.maximumPoolSize(最大线程数):3.keepAliveTime(线程空闲时间):4.unit(时间单位)&#x…
推荐文章