【从零开始学习JAVA | 第三十七篇】初识多线程
目录
前言:
编辑
引入:
多线程:
什么是多线程:
多线程的意义:
多线程的应用场景:
总结:
前言:
本章节我们将开始学习多线程,多线程是一个很重要的知识点,他在我们实际开发中应用广泛并且基础,可以说掌握多线程编写程序是每一个程序员都应当必备的技能,很多小伙伴也会吐槽多线程比较难,但因为其实用性和广泛性,我们一定要学好多线程。
引入:
在现代社会,计算机已经渗透到了我们生活的方方面面。我们使用计算机来处理各种任务,从简单的文档编辑到复杂的数据分析和图像处理。然而,你是否曾想过,当我们的计算机只能运行单个任务时,我们是否能够充分发挥其潜力,实现更高效的处理能力呢?
想象一下,你正在处理一个巨大的数据集,并且需要对其中的每个元素进行计算。在单线程的情况下,你会发现程序需要花费很长的时间来完成这些计算,同时你的计算机的其他资源却处于闲置状态。这是不是让你感到有些无奈?
正是在这样的背景下,多线程技术应运而生。多线程允许我们同时执行多个任务,并将计算机的资源充分利用起来。通过将任务分解为多个线程,并让它们并行执行,我们可以极大地提高程序的执行效率,缩短处理时间,甚至解决一些繁重任务下难以应付的问题。
多线程:
什么是多线程:
介绍多线程之前我们先来介绍一下什么是线程:
在Java中,线程(Thread)是程序执行的最小单位,是进程中的一个执行流程。每个Java程序都至少有一个主线程(Main Thread),主线程从程序的main()方法开始执行。除了主线程外,我们可以通过创建线程对象来创建多个辅助线程,实现多线程并发执行的效果。
线程是操作系统能够进行调度的最小单位,他被包含在进程之中,是进程的实际运作单位。
在Java中,进程(Process)是一个正在运行的程序的实例。进程是操作系统分配资源的基本单位,每个进程有自己独立的内存空间和系统资源。在Java中,通过运行Java程序(类)来创建进程。
每个Java程序至少有一个进程,即Java虚拟机(Java Virtual Machine,JVM)进程。JVM是一个独立的进程,它负责解释和执行Java程序的字节码指令。
当我们运行一个Java程序时,系统会为该程序创建一个新的进程。该进程会分配内存空间,加载和执行程序代码,并为程序分配所需的资源。Java程序可以包含多个线程,这些线程在同一个进程中并发执行。
放到计算机中,进程就是程序的基本执行实体。
我们在电脑的任务管理器中可以看到各种各样的进程
我们以电脑杀毒软件为例:
我们既可以在这个界面进行电脑加速,又可以在其他界面进行电脑杀毒。而此时电脑杀毒软件就是一个进程,电脑加速和电脑杀毒就是两个线程。
而这样互相独立的,可以同时运行的功能(线程)有多个,就形成了多线程。
多线程的意义:
-
提高程序的执行效率:多线程可以使程序同时执行多个任务,有效地利用多核处理器的并行计算能力。通过将任务分配给不同的线程,可以加速程序的执行速度,提高整体的处理能力。
-
改善系统的响应性:在单线程程序中,如果一个任务的执行时间很长,会导致整个程序的阻塞,用户界面无法响应。而采用多线程的方式,可以将长时间运行的任务放在独立的线程中执行,主线程可以继续处理其他任务,保持程序的响应性,提升用户体验。
-
实现并发编程:多线程可以实现并发编程,即多个线程同时运行,共享数据和资源。通过合理地设计和管理线程,可以在复杂的应用程序中实现并发操作,提高程序的灵活性和效率。
-
支持复杂的任务分解和协同处理:多线程使得复杂的任务可以被分解为多个更小的子任务,并由不同的线程并行处理。这样可以更好地利用系统资源,提高任务的分解和协同处理的效率。
-
支持实时应用和多任务处理:多线程可以实现实时应用程序和多任务处理。通过将不同的任务分配给不同的线程,可以更好地控制和管理系统中的任务执行,满足实时性要求。
多线程的应用场景:
- 数据处理和计算密集型任务:当需要对大量数据进行处理、复杂计算或算法运算时,多线程可以将任务分解为多个子任务并并行执行,提高处理速度和效率。例如,图像处理、视频编码、信号处理、科学计算等领域都可以受益于多线程。
- 网络通信和服务器处理:在网络应用程序中,多线程常用于处理同时到达的网络请求或客户端连接。每个请求或连接可以分配给独立的线程来处理,提高服务器的并发处理能力。例如,Web服务器、聊天应用、文件传输等都可以使用多线程来同时处理多个客户端请求。
- 图形界面和交互应用:多线程可以改善图形界面应用程序的响应性。通过将长时间运行的任务放在后台线程中执行,可以保持主线程的响应,提高用户界面的流畅度和用户体验。例如,在游戏开发中,可以用多线程来实现游戏逻辑、图形渲染和用户交互等并行处理。
- 异步编程和并发控制:多线程可以用于实现异步编程模型,通过创建多个线程来实现并发操作和任务协同。例如,在并发编程框架中,多线程可用于处理各种并发任务,如并行计算、资源管理、事件处理等。
- 实时应用和多任务处理:多线程在实时应用程序中非常有用。通过合理管理多个线程的执行和优先级,可以实现对实时任务的快速响应和处理。例如,在实时控制系统、机器人控制、音视频流处理等领域,多线程可用于同时处理多个实时任务。
总之,多线程的应用场景非常广泛,适用于需要同时处理多个任务、提高程序执行效率和实现并发操作的各种应用程序和系统。
小TIPS:
在多线程这里我们经常会将讲到两个概念:并发 和 并行
并发是指在同一时间段内交替执行多个任务或操作,这些任务可以在时间上重叠,但是在特定时刻只能有一个任务正在执行。在并发中,任务通过在不同的时间片内交替执行来实现同时进行的错觉。并发常见于多任务操作系统、多用户系统和网络应用中,能够提高系统的吞吐量和资源利用率。
我们用图来表示并发
并行是指在同一时间点上同时执行多个任务或操作,多个任务可以并行进行,彼此之间相互独立。并行运算通常需要多核处理器或者分布式计算系统来实现,能够加快计算速度,并同时处理更多的任务。并行常见于高性能计算、图像处理、科学计算和大规模数据处理等领域。
我们用图来表示并行
而我们可以在任务资源管理器中查看自己电脑最多可以同时处理的线程数
例如我的电脑是16线程的,那么我对电脑就可以并行处理最多16条线程,一旦超过16条,那么就要转为并发状态,交替处理线程以此来保证效率。
总结:
无论是数据处理还是视频编辑,单线程的执行效率总是让人感到无奈。然而,通过多线程技术,我们可以同时执行多个任务,并充分利用计算机资源。想象一下,将繁重的任务分解为多个子任务,每个子任务都由独立的线程来处理,你会发现程序执行速度大幅提升,工作效率大增。多线程不仅简单而强大,也在各行各业展现着不可或缺的作用。让我们探索多线程的世界,释放计算机的潜力!
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!
相关文章:

【从零开始学习JAVA | 第三十七篇】初识多线程
目录 前言: 编辑 引入: 多线程: 什么是多线程: 多线程的意义: 多线程的应用场景: 总结: 前言: 本章节我们将开始学习多线程,多线程是一个很重要的知识点ÿ…...

微信新功能,你都知道吗?
近日iOS 微信8.0.40正式版来了,一起来看看有哪些变化? 1、朋友圈置顶 几个月前微信开始内测「朋友圈置顶」功能,从网友们的反馈来看,iOS 微信 8.0.40 似乎扩大了内测范围,更多用户可以体验到该功能了。 大家可以去自己…...

Android 中 app freezer 原理详解(二):S 版本
基于版本:Android S 0. 前言 在之前的两篇博文《Android 中app内存回收优化(一)》和 《Android 中app内存回收优化(二)》中详细剖析了 Android 中 app 内存优化的流程。这个机制的管理通过 CachedAppOptimizer 类管理,为什么叫这个名字,而不…...

Vue3_04_ref 函数和 reactive 函数
ref 函数 声明变量时,赋值的值要写在 ref() 函数中修改变量时,变量名.value xxx在模板中使用时可以省略掉 .value,直接使用变量名即可 <template><h1>一个人的信息</h1><h2>姓名:{{name}}</h2><…...

05 Ubuntu下安装.deb安装包方式安装vscode,snap安装Jetbrains产品等常用软件
使用deb包安装类型 deb包指的其实就是debian系统,ubuntu系统是基于debian系统的发行版。 一般我们会到需要的软件官网下载deb安装包,然后你既可以采用使用“软件安装”打开的方法来进行安装,也可以使用命令行进行安装。我推荐后者ÿ…...

性能测试jmeter连接数据库jdbc(sql server举例)
一、下载第三方工具包驱动数据库 1. 因为JMeter本身没有提供链接数据库的功能,所以我们需要借助第三方的工具包来实现。 (有这个jar包之后,jmeter可以发起jdbc请求,没有这个jar包,也有jdbc取样器,但不能发起…...

8.3 C高级 Shell脚本
写一个脚本,包含以下内容: 显示/etc/group文件中第五行的内容创建目录/home/ubuntu/copy切换工作路径到此目录赋值/etc/shadow到此目录,并重命名为test将当前目录中test的所属用户改为root将test中其他用户的权限改为没有任何权限 #!/bin/b…...

2023年华数杯A题
A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性,在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前,由单根隔热材料 A 纤维编织成的织物,其热导率可以直接测出;但是 单根隔热材料 A 纤维…...

【零基础学Rust | 基础系列 | 函数,语句和表达式】函数的定义,使用和特性
文章标题 简介一,函数1,函数的定义2,函数的调用3,函数的参数4,函数的返回值 二,语句和表达式1,语句2,表达式 总结: 简介 在Rust编程中,函数,语句…...
加解密算法+压缩工具
sha256 工具类 package com.fanghui.vota.packages.util;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.math.BigInteger…...

FeignClient接口的几种方式总结
FeignClient这个注解,已经封装了远程调用协议。在springboot的开发,或者微服务的开发过程中,我们需要跨服务调用,或者调用外部的接口,我们都可以使用FeignClient。 一、FeignClient介绍 FeignClient 注解是 Spring Cl…...

springBoot多数据源使用tdengine(3.0.7.1)+MySQL+mybatisPlus+druid连接池
一、安装部署 1、我这里使用的 3.0.7.1版本,因为我看3.x版本已经发布了一年了,增加了很多新的功能,而且3.x官方推荐,对于2.x的版本,官网都已经推荐进行升级到3.x,所以考虑到项目以后的发展,决定…...

剑指Offer 05.替换空格
剑指Offer 05.替换空格 目录 剑指Offer 05.替换空格05.替换空格题目代码(容易想到的)利用库函数的方法题解(时间复杂度更低)面试:为什么java中String类型是不可变的 05.替换空格 题目 官网题目地址 代码(…...
ChatGPT的功能与特点
随着人工智能技术的不断发展,ChatGPT作为OpenAI公司开发的基于GPT-3.5架构的大型语言模型,正引领着智能交互的新纪元。ChatGPT的功能与特点使其能够在多个领域展现出惊人的能力,本文将深入探讨ChatGPT的功能与特点,以及它在人工智…...

Vue2.0基础
1、概述 Vue(读音/vju/,类似于view)是一套用于构建用户界面的渐进式框架,发布于2014年2月。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层(也就是可以理解为HTMLCSSJS)ÿ…...
rust 如何定义[u8]数组?
在Rust中,有多种方式可以定义 [u8] 数组。以下是一些常见的方式: 使用数组字面量初始化数组: let array: [u8; 5] [1, 2, 3, 4, 5];使用 vec! 宏创建可变长度的数组: let mut vec: Vec<u8> vec![1, 2, 3, 4, 5];使用 v…...
关于Hive的使用技巧
前言 Hive是一个基于Hadoop的数据仓库基础架构,它提供了一种类SQL的查询语言,称为HiveQL,用于分析和处理大规模的结构化数据。 Hive的主要特点包括: 可扩展性:Hive可以处理大规模的数据,支持高性能的并行…...

【C++】BSTree 模拟笔记
文章目录 概念插入和删除非递归实现中的问题递归中的引用简化相关OJ复习直达 概念 由下面二叉搜索树的性质可以知道,中序遍历它便可以得到一个升序序列,查找效率高,小于往左找,大于往右走。最多查找高度次,走到到空&am…...

5分钟快手入门laravel邮件通知
第一步: 生成一个邮件发送对象 php artisan make:mail TestMail 第二步: 编辑.env 添加/修改(没有的key则添加) MAIL_DRIVERsmtp MAIL_HOSTsmtp.163.com (这里用163邮箱) MAIL_PORT25 (163邮箱…...

iOS——Block two
Block 的实质究竟是什么呢?类型?变量?还是什么黑科技? Blocks 是 带有局部变量的匿名函数 Blocks 由 OC 转 C 源码方法 在项目中添加 blocks.m 文件,并写好 block 的相关代码。打开「终端」,执行 cd XX…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...