世间纷繁万物, 皆能够于同一时刻达成诸多不同工作。比如说, 人体能够在同一时候开展呼吸、血液循环以及思考问题等各类活动。用户能够运用计算机, 在同一时刻既实现听歌之举, 又完成编写文档以及发送邮件之事, 并且这些相关活动的完工可以在同一当口进行。这种于同一时间执行多个操作的“想法”, 在Java当中被界定为并发,而把并发状态下完成的每一件事情叫做线程。

在Java里头, 并发机制相当关键, 然而并非所有程序语言都能支持线程。在过往的程序当中, 大多是以一个任务完成之后再开展下一个任务的模式来进行的, 如此一来, 下一个任务得以开始就必定要等待前一个任务结束才行。Java语言给出了并发机制, 它准许开发人员在程序里去执行多个线程, 每个线程达成一个功能, 并且和其他线程并发执行。这种机制就被称作多线程。

进行多线程这种极为复杂的机制时,若类似同时阅读3本书, 先是读第1本的第1章, 下一步再去读第2本开头的第1章, 随后又阅读第3本起始的第1章, 紧接着折返回去读第1本的第2章之后继续如此这般, 在这么持续下去的过程当中, 这也就充分地展现出了多线程的复杂性。

倘若多线程这般繁杂, 那它于操作系统里究竟是以怎样的方式来运作的呢? 实际上, Java之中的多线程在每一个操作系统里的运行模式也是存有差别的, 在这儿以操作系统为例来对其运行模式予以介绍。

这是个多任务操作系统的系统, 它拿进程来作单位。一个有着自身地址的程序是进程, 每一个能独立执行的程序都叫进程, 也就是正执行着的程序呗。在那个7系统状态所呈现出来的情形下, 用任务管理器去查看进程, 最终引出的结果就如同图1所展示的那样。

Java并发机制_多线程执行模式_java什么是线程

图1 查看 7 的进程(点此查看原图)

系统能够给每个进程分派一段限定的用于执行CPU的时间, 这也被称作CPU时间片, CPU会在这段时间里执行某个进程, 接着下一个时间段就跳转至另一个进程去执行。鉴于CPU切换的速度极为迅速, 给予使用者的感觉就是这些任务好像在同时运行, 因而运用多线程技术之后, 能够在同一时间内运行更多不同类型的任务。

图2左侧图示展示的是这种执行模式, 此模式存在于单线程环境之中, 涉及到任务1以及任务2。任务1与任务2是那种完全独立、彼此没有关联的任务。任务1有着这样的情况, 它正在等待远程服务器返回数据, 目的在于后续进行处理。处于这种等待期间, CPU始终处于等待状态, 持续在“空运行”。 要是任务2在5秒之后进入运行, 然而执行任务2所需时间极为短暂, 唯1秒而已。但它必须得在任务1运行完结之后, 才能够开启运行。因为是运行于单任务环境里头, 因而任务 2 有着极为漫长的等待时长, 致使系统运行效率大幅度下降了。

单任务具备排队执行的特性, 这等同于同步机制, 恰似于在 cmd 当中输入一条指令之后, 必然要等待此条指令执行终结方可执行下一条指令这般。这便是单任务环境所存在的弊端, 也就是会使得 CPU 利用率显著地降低。

java什么是线程_多线程执行模式_Java并发机制

图2 单线程和多线程执行模式

位于图 2 右侧的, 是多线程环境之下的执行模式。于此之中能够发觉, CPU 完全有能力在任务一号与任务二号之间来回地进行切换, 进而切实致使任务二号无需等待至整整 5 秒方可运行, 如此一来系统的运行效率便得以大幅度提升了。而这, 正是进行多线程技术运用以及学习多, 线程的缘由所在了。

那究竟什么才是线程呢, 线程能够被理解为是处于进程里进行独立运行的子任务, 举例来说, 当 QQ.exe 运行之时, 就存在着诸多子任务在同一时间运行, 诸如好友视频、下载文件、传输数据、发送表情等, 这些各异的任务或者说功能均可同时运行, 其中每一项任务全然能够被理解成是由于“线程”在开展工作, 传文件、听音乐、发送图片表情等功能都有与之对应的线程在后台静静地运行。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐