【JavaEE】认识多线程

作者主页:paper jie_博客

本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。

本文录入于《vaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将MySQL基础知识一网打尽,希望可以帮到读者们哦。

其他专栏:《MySQL》《C语言》《javaSE》《数据结构》等

内容分享:本期将会分享多线程知识~

前言

在上篇文章中,我们提到了多进程这个概念,通过多进程我们就可以同时多次运行多个程序了.但是,这这里其实还是有一个比较明显的缺点.就是进程在创建的时候需要申请资源,销毁的时候需要释放资源.这就会导致开销比较大.再这个前提下,就延伸出了多线程这个概念.

多线程

什么是多线程

多线程也可以叫轻量级进程.一个进程是可以包含多个线程的,且至少得有一个线程.线程也可以单独执行,每个线程都有一个自己的PCB,有一些支持调度的重要属性,比如状态,优先级,记账信息,上下文等. 多线程主要就是为了解决进程申请资源和释放资源开销大的这个问题.且它也可以提高一个进程的效率.多线程是Java常用的编程方式.

为什么多线程可以解决多进程开销大的问题

这是因为一个进程中的所有线程他们的资源是共享的.随着进程创建好,第一个线程也随着创建好了,第一个线程创建的时候会申请好资源,再后面随着创建好的线程都会共用这份资源.这样就意味着,除了第一个线程需要申请和释放资源外,其他的线程都不用在申请资源了.但这不是随便两个线程就可以共享.这需要一组相关的线程才可以,这就叫做线程组.

如果在深究下去的话,为什么它们能资源共享?这是因为线程中会有内存指针这样的属性,它们的内存指正指向的都是同一块内存,这块内存就是第一个线程申请过来的.硬盘资源也是如此,它们也会有一个文件操作符表,是用来操作硬盘资源的.它们表示的也是同一份硬盘资源. 

这里就可以得出一个概念: 在多线程中,进程是分配资源的基本单位. 线程是调度执行的基本单位.

多线程的缺点 

多线程也不是十全十美的,它也有一些缺点.线程不是越多越好,太多了会导致调度开销比较大. 且进程与进程之间是相互独立的,但是多线程中,一个线程挂了,这个进程中的其他线程有可能也会随着异常中断.

进程与线程的区别 

1. 一个进程包含多个线程,且最少有一个线程.

2. 进程是资源分配的基本单位,线程是调度执行的基本单位.

3. 进程间的资源是独立的,但一个进程内的线程是共享资源的.

4.线程也是一单独的执行流,它也有PCB,里面也有状态,优先级,记账信息,上下文

5. 进程与进程间是相互独立,互不干扰的.但是一个进程中,一个线程挂了,其他线程也可能异常中断.

6. 线程不是越多越好,需要适量.不然调度开销会比较大.

7. 线程与线程间可能会相互干扰,会有线程安全问题.

Java中的多线程

线程是操作系统的概念.操作系统内核中实现了线程这样的概念.且对用户提供了统一的API供用户使用.但是这些API大多是拿C/C++写的.在这个前提下,Java标准库中对操作系统的API进行了进一步的抽象与封装. 在Java中表示线程就是用Thread这个类.

第一个多线程程序

Thread就是Java提供的API.在创建一个类后需要继承Thread,再重写他的run方法.run方法是这个线程的入口. 还需要创建实例,这才是一个线程.最后需要使用start方法,它是真正的在内核中创建了线程.

class MyThread extends Thread {@Override//run方法就是这个线程的入口方法public void run() {System.out.println("进去执行啦");}
}public class ThreadDemo {public static void main(String[] args) {//创建实例 线程实例才是真正的线程MyThread myThread = new MyThread();//开始执行 调用Thread的start才是真正的调用系统 api,在系统内核中创建线程myThread.start();}
}

什么是内核

内核就是用来管理管理硬件资源,为软件提供稳定的运行环境.操作系统可以简单的认为是 内核 + 配套的应用程序. 操作系统里面分为内核态和用户态.一般我们的应用程序都是运行在用户态中.但再需要使用硬件资源时,不能直接对硬件资源操作,就需要通过操作系统提供的API进一步在内核中操作.

为什么要划分出内核态和用户态

目的就是为了稳定.为了防止程序把硬件资源,软件资源搞坏了.系统提供的API是合法的.应用程序只能调用这些API,就不会对操作系统或资源造成极大的伤害. 因为在一些极端的情况下程序直接操作硬件可以会将硬件烧坏.

我们可以将操作系统想象成银行,办事窗口是内核区,大厅是用户区.大厅的滑稽需要存钱或者取钱需要通过窗口的工作人员来处理,不能自己直接进去拿.

多线程与普通程序的区别

多线程和普通程序的区别就是每个线程都是一个独立的执行流,他们都是并发执行的,并不是顺序执行代码.

栗子:

class MyThread extends Thread {@Overridepublic void run() {while(true) {System.out.println("hello Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
public class ThreadDemo1 {public static void main(String[] args) {Thread t = new MyThread();t.start();while(true) {System.out.println("hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

通过代码执行打印效果,我们可以发现并不是先打印hello THread在打印 hello main,而是同时执行打印,且是随机的.因为内核中有一个调度器模块.实现方式就是随机调度的效果.

使用jconsole命令观察线程

在本地上找到jbk的bin,再找到jconsole这个可执行文件,双击打不来可以用管理员运行方式打开.

我们可以在线程这一栏中观察我们创建的线程. 


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

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

相关文章

React + BraftEditor 实现富文本编辑

Braft Editor 是一个基于 React 和 Draft-js 开发的富文本编辑器,提供了丰富的基础功能,如基本文本格式化、列表、链接、图片上传、视频插入等,并且还支持扩展。 首先,确保你已经在项目中安装了 Braft Editor 和它的依赖项&#x…

NPU、CPU、GPU算力及算力计算方式

NVIDIA在9月20日发布的NVIDIA DRIVE Thor 新一代集中式车载计算平台,可在单个安全、可靠的系统上运行高级驾驶员辅助应用和车载信息娱乐应用。提供 2000 万亿次浮点运算性能(2000 万亿次8位浮点运算)。NVIDIA当代产品是Orin,算力是…

堪比数据恢复大师软件推荐,恢复数据很简单!

“作为一个经常丢失数据的电脑用户来说,我觉得我非常需要一些简单有效的数据恢复方法。大家有什么比较靠谱的软件推荐吗?非常感谢!” 在数字化时代,数据的存储是比较重要的。很多用户都会选择将重要的文件保存在电脑上。如果数据丢…

第二证券:北证50指数一枝独秀 短剧游戏概念股持续活跃

周三,沪深两市三大指数颤动调整,北证50指数“鹤立鸡群”,大涨超8%。到收盘,上证综指报3043.61点,跌0.79%;深证成指报9855.66点,跌1.41%;创业板指报1950.01点,跌1.73%。沪…

uni-app,nvue中text标签文本超出宽度不换行问题解决

复现:思路: 将text标签换为rich-text,并给rich-text增加换行的样式class类名解决:

【Vue】浏览器安装vue插件

首先看一下安装之后的效果&#xff0c;再考虑一下要不要安装 安装完之后&#xff0c;打开浏览器控制台&#xff08;ctrl shift j) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</t…

HOOPS Web平台助力开发3D应用,实现超大规模3D web轻量化渲染与数据格式转换!

一、包含的软件开发工具包 HOOPS Web平台帮助开发人员构建基于Web的工程应用程序&#xff0c;提供高级3D Web可视化、准确快速的CAD数据访问和3D数据发布。 HOOPS Web平台包括三个集成软件开发工具包 (SDK)&#xff1a; &#xff08;1&#xff09;Web端3D可视化引擎 HOOPSCom…

mysql查询表的字段,字段名以及注释sql语句

sql语句如下&#xff1a; selecta.ordinal_position 序号,a.COLUMN_name 字段名,a.COLUMN_type 字段类型,(case a.is_nullable when NO then 是 else 否 end) 是否非空,(case a.column_key when PRI then 是 else 否 end) 是否主键,a.COLumn_comment 注释 frominformation_sch…

【C/C++】素数专题

素数专题 1.判断素数模板2.求范围内的素数&#xff08;101-200&#xff09;3.判断素数与分解 1.判断素数模板 #include<stdio.h> #include<math.h>int prism(int n){if(n1) return 0;for(int i2;i<sqrt(n);i){if(n%i0) return 0;}return 1; }int main() {int n…

Doris中的物化视图(十八)

物化视图就是包含了查询结果的数据库对象&#xff0c;可能是对远程数据的本地 copy&#xff0c;也可能是一个表或多表 join 后结果的行或列的子集&#xff0c;也可能是聚合后的结果。说白了&#xff0c;就是预先存储查询结果的一种数据库对象。 在 Doris 中的物化视图&#xf…

【深度学习】P1 数据缺失值预处理

数据缺失值预处理 创建数据集展示数据集缺失值处理 创建数据集 首先创建一个人工数据集&#xff0c;作为下文对数据缺失值预处理的案例&#xff0c; import osos.makedirs(os.path.join(.., data), exist_okTrue) data_file os.path.join(.., data, house_tiny.csv) with op…

SIP协议在语音通信的应用方式

在企业语音通信的过程中&#xff0c;SIP协议支持的网络通信技术通过网络为用户提供了无数的通信便利&#xff0c;已成为企业不可或缺的重要通信技术。由于SIP协议是语音通信帮助企业实现这些优势的原因&#xff0c;因此了解支持这些呼叫的SIP协议的上下文至关重要。 什么是SIP?…

Duplicate 模型中的 ROLLUP(十六)

因为 Duplicate 模型没有聚合的语意。所以该模型中的 ROLLUP&#xff0c;已经失去了“上卷”这一层含义。而仅仅是作为调整列顺序&#xff0c;以命中前缀索引的作用。下面详细介绍前缀索引&#xff0c;以及如何使用 ROLLUP 改变前缀索引&#xff0c;以获得更好的查询效率。 前…

微服务保护 Sentinel

1.初识Sentinel 文章目录 1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结 1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel 1.4.微服务整合Sentinel 2.流量控制2.1.簇点链…

MacM1(ARM)安装Protocol Buffers

MacM1(ARM)安装Protocol Buffers 本文目录 MacM1(ARM)安装Protocol Buffers3.21之前版本安装使用configure3.22之后版本安装使用cmake使用编译后的版本 protobuf下载地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 在运行./autogen.sh或./configure命…

curl添加https服务

CURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。 首选删除系统自带的openssl&#xff0c;因为他只有可执行程序和库&#xff0c;没有头文件。 sudo apt-get remove openssl openssl官网&am…

CentOS7磁盘挂载

1 引言 本文主要讲述CentOS7磁盘挂载相关知识点和操作。 2 磁盘挂载 步骤1&#xff1a; 查看机器所挂硬盘及分区情况 fdisk -l查询结果&#xff1a; 由上图可以看到该结果包含&#xff1a;硬盘名称、硬盘大小等信息。 属性解释说明Disk /dev/vda硬盘名称53.7G磁盘大…

6S精益管理必备装备降低物料损耗

在工厂生产环境中&#xff0c;设备管理是确保生产效率和质量的关键因素之一。6S管理方法是一种源自日本的管理体系&#xff0c;旨在通过整顿、整理、清扫、清洁、素养、遵守六个步骤&#xff0c;实现工作环境的优化和管理的高效。 仓库管理中&#xff0c;库存损耗一直是企业面…

分布式篇---第四篇

系列文章目录 文章目录 系列文章目录前言一、分布式ID生成有几种方案?二、幂等解决方法有哪些?三、常见负载均衡算法有哪些?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给…

多回路交流三相单相电压电流电量监测开口式互感器适用多种环境用电能耗监控

1 产品概述 多回路交流无线电压电流传感器/电量采集监测仪搭配多路开口式互感器&#xff0c;可以监控采集三相电压、电流、功率和电量等信息&#xff0c;可用于能耗采集监控。支持RS485和4G网络接口&#xff0c;数据可以对接客户指定的第三方云平台。本产品可实现单相/三相用电…