【java多线程】线程基础知识笔记

目录

1、多线程介绍

2、线程

 3、线程的调度

 4、线程的生命周期

5、线程的并行与并发

6、程的同步与异步

1、多线程介绍

        多线程:指的是这个程序(一个进程)运行时产生了不止一个线程,是Java语言的重要特性,大量应用于网络编程、服务器端程序的开发,最常见的UI界面底层原理、操作系统底层原理都大量使用了多线程。

        多线程的应用场景:只要你想让多个事情同时运行就需要用到多线程

        比如:软件中的耗时操作、所有的聊天软件、所有的服务器。我们可以流畅的点击软件或者游戏中的各种按钮,底层就是多线程的应用。UI界面的主线程绘制界面,如果有一个耗时的操作发生则启动新的线程,完全不影响主线程的工作。当这个线程工作完毕后,再更新到主界面上。

        我们可以上百人、上千人、上万人同时访问某个网站,也是基于网站服务器的多线程原理。如果没有多线程,服务器处理速度会极大降低。有了多线程,我们就可以让程序同时做多件事情,提高工作效率。

        多线程程序(基于一个CPU)并不能提高程序的运行速度,但能够提高程序的运行效率,让CPU使用率更高。

        JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题!

2、线程

 2.1、线程是什么?

        线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

        一个进程中可以有多个线程,同一个进程中的多个线程共享这个进程的资源。

        比如:QQ 和 Chrome 浏览器是两个进程,Chrome 进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。

2.2、为什么要引入线程?

        由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,需要较大的时空开销,限制了并发程度的进一步提高。为减少进程切换的开销,把进程作为资源分配单位和调度单位这两个属性分开处理,即进程还是作为资源分配的基本单位,但是不作为调度的基本单位(很少调度或切换),把调度执行与切换的责任交给线程,即线程成为独立调度的基本单位,它比进程更容易(更快)创建,也更容易撤销。

        注意:引入线程前,进程是资源分配和独立调度的基本单位。引入线程后,进程是资源分配的基本单位,线程是独立调度的基本单位。

 3、线程的调度

        线程调度可以分为非抢占式和抢占式,非抢占式调度:在非抢占式系统中,一个线程一旦被选择在处理器上执行,就一直运行,直到阻塞或自愿放弃或退出;抢占式调度:抢占式系统中,一个线程被选中后,允许运行的时间长度有最大的限制,当到达这个时间后,就被迫放弃执行权,由系统来决定下一个执行的线程。

        线程调度的算法有:先来先服务算法,时间片轮换算法,优先级调度算法

                先来先服务算法:这是在非抢占系统中的算法,顾名思义,即谁先来先执行谁。

                时间片轮换算法:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU

                                             的时间。

                优先级调度算法:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么

                                             会随机选择一个(线程随机性)。

        java使用的是抢占式调度:在Java中,线程的调度算法由操作系统负责实现,而Java虚拟机(JVM)并不直接控制线程的调度顺序。因此,具体的线程调度算法取决于底层操作系统的实现。在一般情况下,操作系统会根据线程的优先级来进行调度。优先级高的线程通常会更容易被选择执行,但并不是绝对的。操作系统可能会根据其他因素进行调整,比如时间片轮转、线程状态等。因此,并不是一定优先级越高的线程会先执行。

 4、线程的生命周期

Java线程生命周期状态转换图

补充:sleep方法会让线程睡眠,睡眠时间到了之后,不会立马就执行下面的代码,因为sleep方法时间到了后,线程到了就绪队列中,需要抢占到CPU才有执行权,才会执行这个线程

线程的状态

新建状态(NEW)

————————>

创建线程对象

就绪状态(RUNNABLE)

————————>

start方法

阻塞状态(BLOCKED)

————————>

无法获得锁对象

运行状态(Running)

————————>

线程执行

等待状态(WAITING)

————————>

wait方法

计时等待(TIMED WAITING)

————————>

sleep方法

结束状态(TERMINATED)

————————>

全部代码运行完毕

5、线程的并行与并发

并行:在同一时刻,有多个指令在多个CPU上同时执行

并发:在同一时刻,有多个指令在单个CPU上交替执行

        在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个进程同时运行,这在单 CPU 系统中,每一时刻只能有一道进程执行,即微观上这些进程是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。

        而在多个 CPU 的系统中,则这些可以并发执行的进程便可以分配到多个处理器上(CPU),实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。目前电脑市场上说的多核 CPU,便是多核处理器,核越多,并行处理的程序越多,能大大的提高电脑运行的效率。

        注意:单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个CPU上并发运行。同理,线程也是一样的,从宏观角度上理解线程是并行运行的,但是从微观角度上分析却是串行运行的,即一个线程一个线程的去运行,当系统只有一个CPU时,线程会以某种顺序执行多个线程,这种情况就是上面介绍的线程调度。

6、程的同步与异步

        同步是执行或调用一个方法时,每次都需要拿到对应的结果才会继续往后执行;异步与同步相反,它会在执行或调用一个方法后就继续往后执行,不会等待获取执行结果。二者的区别就是处理请求发出后,是否需要等待请求结果,再去继续执行其他操作。

        线程安全是同步,线程不安全是异步

        同步:排队执行,效率低但是安全

        异步:同时执行,效率高但是数据不安全

异步情况:

同步情况: 

 

推荐:

【操作系统】进程基础知识-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/136845709?spm=1001.2014.3001.5501【Java基础】IO流(三):字符流的FileReader(文件字符输入流)和 FileWriter(文件字节输出流)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/136721417?spm=1001.2014.3001.5501【Java基础】IO流(二)字符集知识-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/136721466?spm=1001.2014.3001.5501

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

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

相关文章

[Linux开发工具]——gcc/g++的使用

Linux编译器——gcc/g的使用 一、快速认识gcc/g二、程序的翻译过程2.1 预处理(.i文件)2.2 编译(.s文件)2.3 汇编(.o文件)2.4 链接(生成可执行文件或库文件) 三、认识函数库3.1 静态库…

一大波新型勒索病毒来袭(更新)

目前勒索病毒仍然是全球最大的威胁,最近一年针对企业的勒索病毒攻击越来越多,大部分勒索病毒是无法解密的,一定要保持高度的重视,近期又有一大波新型勒索病毒来袭...... HildaCrypt勒索病毒 加密后的文件后缀名HCY,如…

qt 置顶窗口崩溃无法退出解决,停止运行快捷键设置

有时置顶窗口调试崩溃需要快捷键进行关闭,如下设置即可 这样就可以通过全局快捷键退出了,避免置顶崩溃无法关闭程序的问题。

《系统架构设计师教程(第2版)》第7章-系统架构设计基础知识-02-基于架构的软件开发方法

文章目录 1. 基于架构的软件设计(ABSD)1.1 概述1.2 ABSD方法的3个基础 2. 概念与术语2.1 设计元素2.2 视角与视图2.3 用例和质量场景 3. ABSD模型4. 体系结构需求4.1 需求获取4.2 标识构件4.3 架构需求评审 5. 体系结构设计5.1 体系结构设计5.2 软件体系…

8 克隆虚拟机

后期集群我们需要使用多台服务器,此处我们先克隆三台,master,slave01,slave02. 1.先关闭模版虚拟机。再选择 模版虚拟机hadoop100右击--》管理 --》克隆 2.下图中特别注意:建议使用集群的名字作为虚拟机名称。目前克隆主机master. 以上步骤完…

Django数据库查询

聚合查询 分组查询 F与Q查询 默认情况下,用Q包裹的两个条件,用逗号分割也是and关系 choices参数 只要某个字段的可能性是完全可以列举出来的,可以采取choices参数 该gender字段存的还是数字,但是如果数字在上面的元组列举范围内,该怎么获取对应的值,如果不在范围内,会怎…

Java学习笔记(20)

可变参数 输入的参数数量不确定 底层就是把输入的参数放进一个数组里 只能写一个可变参数如果还有其他形参,可变参数要放在最后写 可变参数在底层就是一个数组 Collections Addall shuffle 练习 package exercise;import java.util.ArrayList; import java.util.C…

Nacos详解,从安装到服务部署,及nginx反向代理

Nacos 安装 Windows安装 下载 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/alibaba/nacos GitHub的Release下载页:https://github.com/alibaba/nacos…

更新数据库表中的数据

目录 update 加上各种限制条件 update update 表名set 列名1xx,列名2xx 指定更新某列数据如果不添加where子句,则为全列更新 也可以在原有基础上更新: 注意,mysql语法里不支持,必须是列名列名数值 加上各种限制条件 比如加上order by子句,where子句,limit等 这些条件对于up…

Flutter 运行 flutter doctor 命令长时间未响应

由于 Flutter 运行 flutter doctor 命令,会从 pub(https://pub.dev/ 类似于 Node.js 的 npm) 上进行资源的下载,如果没有配置国内镜像,可能会由于其服务器在国外导致资源下载慢或者下载不下来,所以出现了运行 flutter doctor 命令…

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

算法复杂度的介绍

算法复杂度简介 复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。常见的复杂度并不多,从低阶到高阶有…

API(时间类)

一、Date类 java.util.Date类 表示特定的瞬间,精确到毫秒。 Date常用方法: public long getTime() 把日期对象转换成对应的时间毫秒值。 public void setTime(long time) 把方法参数给定的毫秒值设…

使用布丰投针法精确计算圆周率

如果在平面上有两条距离为d的平行线,假设如果拿一根长度是L的铁针随机的丢到纸面上去,那么试问铁针与某条直线所相交的概率是多少,假设铁针的长度L是大于平行线的距离d的,这样铁针就不会同时与两条直线所相交了。 添加图片注释&am…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《基于老化成本实时次梯度的异构储能系统功率分配策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

如何进行软件测试

1、测试用例带给我们的好处 (1)测试执行者的依据 (2)使得工作可重复,自动化测试的基础 (3)评估需求覆盖率 (4)用例的复用 (5)积累测试的方法思…

零代码编程:用kimichat将srt字幕文件进行批量转换合并

文件夹里面有多个srt字幕文件,借助kimichat可以很方便的对其进行批量合并。 在kimichat中输入提示词: 你是一个Python编程专家,写一个Python脚本,完成一个处理整理文档内容的任务,具体步骤如下: 打开文件…

Microsoft Copilot (Bing Chat)

Copilot: Your everyday AI companion (你每天的AI伙伴) Bing AI - 搜索 Microsoft Copilot: 你的日常 AI 助手 Copilot|Designer: Create images from words with AI https://www.bing.com/images/create 2024 年 1 月 23 日更新: 在微软…

软考高级:软件架构评估-质量属性概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【Winform学习笔记(十一)】解决无边框窗体最大化显示异常问题

解决无边框窗体最大化显示异常问题 前言正文1、防止改变窗口大小时控件闪烁2、FrmMain_SizeChanged 前言 Winform 无边框窗体的设计,旨在为用户提供更加独特和个性化的界面体验,但是在实现这一设计的过程中,最大化显示异常问题往往成为开发者…
最新文章