【从零开始学习JAVA | 第三十七篇】初识多线程

目录

前言:

​编辑

引入:

多线程:

        什么是多线程:

        多线程的意义:

        多线程的应用场景:

总结:


前言:

                本章节我们将开始学习多线程,多线程是一个很重要的知识点,他在我们实际开发中应用广泛并且基础,可以说掌握多线程编写程序是每一个程序员都应当必备的技能,很多小伙伴也会吐槽多线程比较难,但因为其实用性和广泛性,我们一定要学好多线程。

引入:

在现代社会,计算机已经渗透到了我们生活的方方面面。我们使用计算机来处理各种任务,从简单的文档编辑到复杂的数据分析和图像处理。然而,你是否曾想过,当我们的计算机只能运行单个任务时,我们是否能够充分发挥其潜力,实现更高效的处理能力呢?

想象一下,你正在处理一个巨大的数据集,并且需要对其中的每个元素进行计算。在单线程的情况下,你会发现程序需要花费很长的时间来完成这些计算,同时你的计算机的其他资源却处于闲置状态。这是不是让你感到有些无奈?

正是在这样的背景下,多线程技术应运而生。多线程允许我们同时执行多个任务,并将计算机的资源充分利用起来。通过将任务分解为多个线程,并让它们并行执行,我们可以极大地提高程序的执行效率,缩短处理时间,甚至解决一些繁重任务下难以应付的问题。

多线程:

        什么是多线程:

介绍多线程之前我们先来介绍一下什么是线程:

在Java中,线程(Thread)程序执行最小单位,是进程中的一个执行流程。每个Java程序都至少有一个主线程(Main Thread),主线程从程序的main()方法开始执行。除了主线程外,我们可以通过创建线程对象来创建多个辅助线程,实现多线程并发执行的效果。

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

在Java中,进程(Process)是一个正在运行的程序的实例。进程是操作系统分配资源的基本单位,每个进程有自己独立的内存空间和系统资源。在Java中,通过运行Java程序(类)来创建进程。

每个Java程序至少有一个进程,即Java虚拟机(Java Virtual Machine,JVM)进程。JVM是一个独立的进程,它负责解释和执行Java程序的字节码指令。

当我们运行一个Java程序时,系统会为该程序创建一个新的进程。该进程会分配内存空间,加载和执行程序代码,并为程序分配所需的资源。Java程序可以包含多个线程,这些线程在同一个进程中并发执行。

放到计算机中,进程就是程序的基本执行实体。

 我们在电脑的任务管理器中可以看到各种各样的进程

我们以电脑杀毒软件为例:

我们既可以在这个界面进行电脑加速,又可以在其他界面进行电脑杀毒。而此时电脑杀毒软件就是一个进程,电脑加速和电脑杀毒就是两个线程。

而这样互相独立的可以同时运行的功能(线程)有多个,就形成了多线程。

        多线程的意义:

  1. 提高程序的执行效率:多线程可以使程序同时执行多个任务,有效地利用多核处理器的并行计算能力。通过将任务分配给不同的线程,可以加速程序的执行速度,提高整体的处理能力。

  2. 改善系统的响应性:在单线程程序中,如果一个任务的执行时间很长,会导致整个程序的阻塞,用户界面无法响应。而采用多线程的方式,可以将长时间运行的任务放在独立的线程中执行,主线程可以继续处理其他任务,保持程序的响应性,提升用户体验。

  3. 实现并发编程:多线程可以实现并发编程,即多个线程同时运行,共享数据和资源。通过合理地设计和管理线程,可以在复杂的应用程序中实现并发操作,提高程序的灵活性和效率。

  4. 支持复杂的任务分解和协同处理:多线程使得复杂的任务可以被分解为多个更小的子任务,并由不同的线程并行处理。这样可以更好地利用系统资源,提高任务的分解和协同处理的效率。

  5. 支持实时应用和多任务处理:多线程可以实现实时应用程序和多任务处理。通过将不同的任务分配给不同的线程,可以更好地控制和管理系统中的任务执行,满足实时性要求。

        多线程的应用场景:

  1. 数据处理和计算密集型任务:当需要对大量数据进行处理、复杂计算或算法运算时,多线程可以将任务分解为多个子任务并并行执行,提高处理速度和效率。例如,图像处理、视频编码、信号处理、科学计算等领域都可以受益于多线程。
  2. 网络通信和服务器处理:在网络应用程序中,多线程常用于处理同时到达的网络请求或客户端连接。每个请求或连接可以分配给独立的线程来处理,提高服务器的并发处理能力。例如,Web服务器、聊天应用、文件传输等都可以使用多线程来同时处理多个客户端请求。
  3. 图形界面和交互应用:多线程可以改善图形界面应用程序的响应性。通过将长时间运行的任务放在后台线程中执行,可以保持主线程的响应,提高用户界面的流畅度和用户体验。例如,在游戏开发中,可以用多线程来实现游戏逻辑、图形渲染和用户交互等并行处理。
  4. 异步编程和并发控制:多线程可以用于实现异步编程模型,通过创建多个线程来实现并发操作和任务协同。例如,在并发编程框架中,多线程可用于处理各种并发任务,如并行计算、资源管理、事件处理等。
  5. 实时应用和多任务处理:多线程在实时应用程序中非常有用。通过合理管理多个线程的执行和优先级,可以实现对实时任务的快速响应和处理。例如,在实时控制系统、机器人控制、音视频流处理等领域,多线程可用于同时处理多个实时任务。

总之,多线程的应用场景非常广泛,适用于需要同时处理多个任务、提高程序执行效率和实现并发操作的各种应用程序和系统。

小TIPS:

        在多线程这里我们经常会将讲到两个概念:并发并行

并发是指在同一时间段内交替执行多个任务或操作,这些任务可以在时间上重叠,但是在特定时刻只能有一个任务正在执行。在并发中,任务通过在不同的时间片内交替执行来实现同时进行的错觉。并发常见于多任务操作系统、多用户系统和网络应用中,能够提高系统的吞吐量和资源利用率。

我们用图来表示并发

并行是指在同一时间点上同时执行多个任务或操作,多个任务可以并行进行,彼此之间相互独立。并行运算通常需要多核处理器或者分布式计算系统来实现,能够加快计算速度,并同时处理更多的任务。并行常见于高性能计算、图像处理、科学计算和大规模数据处理等领域。

我们用图来表示并行

而我们可以在任务资源管理器中查看自己电脑最多可以同时处理的线程数

例如我的电脑是16线程的,那么我对电脑就可以并行处理最多16条线程,一旦超过16条,那么就要转为并发状态,交替处理线程以此来保证效率。

总结:

   无论是数据处理还是视频编辑,单线程的执行效率总是让人感到无奈。然而,通过多线程技术,我们可以同时执行多个任务,并充分利用计算机资源。想象一下,将繁重的任务分解为多个子任务,每个子任务都由独立的线程来处理,你会发现程序执行速度大幅提升,工作效率大增。多线程不仅简单而强大,也在各行各业展现着不可或缺的作用。让我们探索多线程的世界,释放计算机的潜力!

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

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

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

相关文章

MYSQL进阶-事务

1.什么是数据库事务? 事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执 行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上 的一组操作,要么都执行,要么都不执行。 事务…

使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用

LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架,在这个应用场景中,LangChain 将与 Amazon DynamoDB 紧密结合,构建一个完整的基于大语言模型的聊天应用。 本次活动,我们特意邀请了亚马逊云科…

华为云CTS 使用场景

云审计服务 CTS 云审计服务(Cloud Trace Service),帮助您监控并记录华为云账号的活动,包括通过控制台、API、开发者工具对云上产品和服务的访问和使用行为,提供对各种云资源操作记录的收集、存储和查询功能&#xff0…

应用在多媒体手机中的低功率立体声编解码器

多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合,一般是图像、文字、声音等多种结合,所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念,主要是指文字、图形、图像、声音等多种…

【0803作业】创建两个线程:其中一个线程拷贝图片的前半部分,另一个线程拷贝后半部分(4种方法)

方法一:使用pthread_create、pthread_exit、pthread_join函数【两个线程不共用同一份资源】 先在主函数创建并清空拷贝的目标文件,再创建两个线程,在两个线程内部同时打开要读取的文件以及要拷贝的目标文件(两个线程不共用同一份资…

Vulnhub: BlueMoon: 2021靶机

kali:192.168.111.111 靶机:192.168.111.174 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.174 80端口目录爆破,发现文件:hidden_text gobuster dir -u http://192.168.111.174 -w /usr/sha…

牛客网Verilog刷题——VL41

牛客网Verilog刷题——VL41 题目答案 题目 请设计一个可以实现任意小数分频的时钟分频器,比如说8.7分频的时钟信号,注意rst为低电平复位。提示:其实本质上是一个简单的数学问题,即如何使用最小公倍数得到时钟周期的分别频比。设小…

RabbitMQ教程与安装

1 在CentOS7中安装RabbitMQ 在 CentOS 中安装 RabbitMQ 的命令如下: 首先,确保已经安装了 EPEL 软件包存储库。如果没有,请运行以下命令安装它: sudo yum install epel-release 更新系统的软件包列表: sudo yum upda…

成本控制策略:加强企业安全

我们生活在一个不确定的时代。大多数经济学家预测,今年全球经济将继续放缓,亚太地区当然也不会逆势而上。 在供应链问题、大规模裁员、高通胀和高利率之间,我们毫不奇怪地看到大多数公司和行业采取谨慎态度,战略、增长计划和预算…

艺术二维码 API 申请及使用

艺术二维码是一种创新的技术产品,它将二维码与美观的背景图像相结合,创造出既实用又美观的作品。它们不仅具有传统二维码的功能性,能被智能设备快速扫描识别,还加入了艺术元素,增强了视觉吸引力和品牌识别度。其中&…

GPT Prompt编写的艺术:如何提高AI模型的表现力

随着AI技术的迅速发展,人工智能模型变得越来越强大,能够协助我们完成各种任务。然而,如何更好地利用AI的能力仍然存在很大的探索空间。在与AI进行交互的过程中,我们主要依赖于Prompt,不管是直接与大模型交互&#xff0…

opencv-34 图像平滑处理-2D 卷积 cv2.filter2D()

2D卷积是一种图像处理和计算机视觉中常用的操作,用于在图像上应用滤波器或卷积核,从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中,图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动,对每个局部区…

Robot Framweork之UI自动化测试---分层设计

Robot Framework 的分层思想是一种测试设计和代码组织的模式,它将测试用例的实现和测试执行逻辑分离,以提高测试的可维护性、可读性和可扩展性。 一、分层思想 在实际项目中,一般分为三层:元素层,流程层,用…

k8s之Helm安装

一、最快安装–官网提供的脚本–默认获取最新版本 cd /usr/local/src/ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shhelm search hub wordpresssource <(helm completion bash) h…

pycharm——漏斗图

import pyecharts.options as opts from pyecharts.charts import Funnel""" Gallery 使用 pyecharts 1.1.0 参考地址: https://echarts.apache.org/examples/editor.html?cfunnel目前无法实现的功能:1、暂时无法对漏斗图的长宽等范围操作进行修改 ""…

Metric3D:Towards Zero-shot Metric 3D Prediction from A Single Image

参考代码&#xff1a;Metric3D 介绍 在如MiDas、LeReS这些文章中对于来源不同的深度数据集使用归一化深度作为学习目标&#xff0c;则在网络学习的过程中就天然失去了对真实深度和物体尺寸的度量能力。而这篇文章比较明确地指出了影响深度估计尺度变化大的因素就是焦距 f f f…

Ubuntu20.04 + QT5.14.2 + VTK8.2.0 + PCL 1.10 环境配置

目录 Ubuntu20.04 QT5.14.2 VTK8.2.0 PCL 1.10 环境配置一、VTK 编译和安装1、库依赖&#xff1a;2、下载资源&#xff1a;[下载VTK8.2.0](https://www.vtk.org/files/release/8.2/VTK-8.2.0.tar.gz)3、编译&#xff1a;4、安装5、qtcreator 配置编译的libQVTKWidgetPlugin.…

解密Redis:应对面试中的缓存相关问题2

面试官&#xff1a;Redis集群有哪些方案&#xff0c;知道嘛&#xff1f; 候选人&#xff1a;嗯~~&#xff0c;在Redis中提供的集群方案总共有三种&#xff1a;主从复制、哨兵模式、Redis分片集群。 面试官&#xff1a;那你来介绍一下主从同步。 候选人&#xff1a;嗯&#xff…

C++ 左值和右值

C 左值和右值 左值、右值左值引用、右值引用std::move()std::move()的实现引用折叠 完美转发forward()的实现函数返回值是左值还是右值如何判断一个值是左值还是右值 左值、右值 在C11中所有的值必属于左值、右值两者之一&#xff0c;右值又可以细分为纯右值、将亡值。在C11中…

git clone 登录 github

git clone 登录 github 目录概述需求&#xff1a; 设计思路实现思路分析1.github 设置setting2.输入passwd 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result…