Java多线程是啥?别再排队等死,并发才是王道
世间纷繁万物, 皆能够于同一时刻达成诸多不同工作。比如说, 人体能够在同一时候开展呼吸、血液循环以及思考问题等各类活动。用户能够运用计算机, 在同一时刻既实现听歌之举, 又完成编写文档以及发送邮件之事, 并且这些相关活动的完工可以在同一当口进行。这种于同一时间执行多个操作的“想法”, 在Java当中被界定为并发,而把并发状态下完成的每一件事情叫做线程。
在Java里头, 并发机制相当关键, 然而并非所有程序语言都能支持线程。在过往的程序当中, 大多是以一个任务完成之后再开展下一个任务的模式来进行的, 如此一来, 下一个任务得以开始就必定要等待前一个任务结束才行。Java语言给出了并发机制, 它准许开发人员在程序里去执行多个线程, 每个线程达成一个功能, 并且和其他线程并发执行。这种机制就被称作多线程。
进行多线程这种极为复杂的机制时,若类似同时阅读3本书, 先是读第1本的第1章, 下一步再去读第2本开头的第1章, 随后又阅读第3本起始的第1章, 紧接着折返回去读第1本的第2章之后继续如此这般, 在这么持续下去的过程当中, 这也就充分地展现出了多线程的复杂性。
倘若多线程这般繁杂, 那它于操作系统里究竟是以怎样的方式来运作的呢? 实际上, Java之中的多线程在每一个操作系统里的运行模式也是存有差别的, 在这儿以操作系统为例来对其运行模式予以介绍。
这是个多任务操作系统的系统, 它拿进程来作单位。一个有着自身地址的程序是进程, 每一个能独立执行的程序都叫进程, 也就是正执行着的程序呗。在那个7系统状态所呈现出来的情形下, 用任务管理器去查看进程, 最终引出的结果就如同图1所展示的那样。

图1 查看 7 的进程(点此查看原图)
系统能够给每个进程分派一段限定的用于执行CPU的时间, 这也被称作CPU时间片, CPU会在这段时间里执行某个进程, 接着下一个时间段就跳转至另一个进程去执行。鉴于CPU切换的速度极为迅速, 给予使用者的感觉就是这些任务好像在同时运行, 因而运用多线程技术之后, 能够在同一时间内运行更多不同类型的任务。
图2左侧图示展示的是这种执行模式, 此模式存在于单线程环境之中, 涉及到任务1以及任务2。任务1与任务2是那种完全独立、彼此没有关联的任务。任务1有着这样的情况, 它正在等待远程服务器返回数据, 目的在于后续进行处理。处于这种等待期间, CPU始终处于等待状态, 持续在“空运行”。 要是任务2在5秒之后进入运行, 然而执行任务2所需时间极为短暂, 唯1秒而已。但它必须得在任务1运行完结之后, 才能够开启运行。因为是运行于单任务环境里头, 因而任务 2 有着极为漫长的等待时长, 致使系统运行效率大幅度下降了。
单任务具备排队执行的特性, 这等同于同步机制, 恰似于在 cmd 当中输入一条指令之后, 必然要等待此条指令执行终结方可执行下一条指令这般。这便是单任务环境所存在的弊端, 也就是会使得 CPU 利用率显著地降低。

图2 单线程和多线程执行模式
位于图 2 右侧的, 是多线程环境之下的执行模式。于此之中能够发觉, CPU 完全有能力在任务一号与任务二号之间来回地进行切换, 进而切实致使任务二号无需等待至整整 5 秒方可运行, 如此一来系统的运行效率便得以大幅度提升了。而这, 正是进行多线程技术运用以及学习多, 线程的缘由所在了。
那究竟什么才是线程呢, 线程能够被理解为是处于进程里进行独立运行的子任务, 举例来说, 当 QQ.exe 运行之时, 就存在着诸多子任务在同一时间运行, 诸如好友视频、下载文件、传输数据、发送表情等, 这些各异的任务或者说功能均可同时运行, 其中每一项任务全然能够被理解成是由于“线程”在开展工作, 传文件、听音乐、发送图片表情等功能都有与之对应的线程在后台静静地运行。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)