news 2026/4/15 18:40:00

java juc 01 进程与线程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java juc 01 进程与线程

进程和线程的概念
并行和并发的概念
线程基本应用

ps :随便写写,今天就是开个新章

对比维度进程(Process)线程(Thread)
基本概念程序运行时的一个实例,用来加载指令、管理内存、管理 IO进程内部的一条执行路径(指令流),由 CPU 调度执行
包含关系一个进程可以包含多个线程线程必须依附于进程存在
调度单位(Java)资源分配的最小单位CPU 最小调度单位
资源占有拥有独立的内存空间、文件句柄、IO 资源等共享所属进程的资源(内存、文件、IO)
独立性进程之间基本相互独立同一进程内线程相互依赖
通信方式进程通信复杂:IPC、管道、消息队列、网络协议等线程通信简单:共享内存、共享变量即可
创建/销毁开销开销大,系统资源消耗多开销小,更轻量
上下文切换成本较高(涉及地址空间切换)较低(共享进程资源)
典型例子打开多个浏览器窗口 = 多个进程浏览器一个进程内:渲染线程、网络线程等
Windows 特点进程更多作为线程的容器,本身不直接执行真正执行任务的是线程

并行与并发

单核 cpu 下,线程实际还是 串行执行 的。操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows
下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感觉是 同时运行的 。总结为一句话就是:微观串行,宏观并行

一般会将这种 线程轮流使用 CPU 的做法称为并发, concurrentr 多个任务在同一时间段内交替执行

多核 cpu下,每个 核(core) 都可以调度运行线程,这时候线程可以是并行的。

多个任务在同一时刻真正同时执行

应用

以调用方角度来讲,如果
需要等待结果返回,才能继续运行就是同步
不需要等待结果返回,就能继续运行就是异步

多线程可以让方法执行变为异步的(即不要巴巴干等着)比如说读取磁盘文件时,假设读取操作花费了 5 秒钟,如
果没有线程调度机制,这 5 秒 cpu 什么都做不了,其它代码都得暂停...

比如在项目中,视频文件需要转换格式等操作比较费时,这时开一个新线程处理视频转换,避免阻塞主线程
tomcat 的异步 servlet 也是类似的目的,让用户线程处理耗时较长的操作,避免阻塞 tomcat 的工作线程
ui 程序中,开线程进行其他操作,避免阻塞 ui 线程

import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class tttest { public class ParallelComputeDemo { public static void main(String[] args) throws Exception { // 1. 创建线程池(CPU核心数) ExecutorService pool = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors() ); long start = System.currentTimeMillis(); // 2. 并行执行三个任务 CompletableFuture<Integer> task1 = CompletableFuture.supplyAsync(() -> compute(10), pool); CompletableFuture<Integer> task2 = CompletableFuture.supplyAsync(() -> compute(11), pool); CompletableFuture<Integer> task3 = CompletableFuture.supplyAsync(() -> compute(9), pool); // 3. 汇总(等待所有任务完成) Integer result = CompletableFuture.allOf(task1, task2, task3) .thenApply(v -> task1.join() + task2.join() + task3.join()) .get(); long end = System.currentTimeMillis(); System.out.println("最终汇总结果 = " + result); System.out.println("总耗时 = " + (end - start) + "ms"); pool.shutdown(); } // 模拟计算任务 private static int compute(int time) { try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } return time; } } }

最终汇总结果 = 30
总耗时 = 14ms

1. 单核 cpu 下,多线程不能实际提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用
cpu ,不至于一个线程总占用 cpu,别的线程没法干活
2. 多核 cpu 可以并行跑多个线程,但能否提高程序运行效率还是要分情况的
有些任务,经过精心设计,将任务拆分,并行执行,当然可以提高程序的运行效率。但不是所有计算任务都能拆分也不是所有任务都需要拆分,任务的目的如果不同,谈拆分和效率没啥意义
3. IO 操作不占用 cpu,只是我们一般拷贝文件使用的是【阻塞 IO】,这时相当于线程虽然不用 cpu,但需要一直等待 IO 结束,没能充分利用线程。所以才有后面的【非阻塞 IO】和【异步 IO】优化

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 18:07:21

Ella陈嘉桦「艾拉主意」巡演南宁站两晚连唱 现场嗦粉打造出圈名场面

Ella 陈嘉桦「It’s Me 艾拉主意」巡演继长沙、杭州、广州、上海站后&#xff0c;持续保持场场秒罄、口碑爆棚的火爆势头。2026年2月7日至8日&#xff0c;这场音乐盛宴落地绿城南宁&#xff0c;于广西体育中心体育馆一连两晚盛大开唱。其中2月8日场是整轮巡演中的第十场演出&am…

作者头像 李华
网站建设 2026/4/15 15:29:13

【Django毕设全套源码+文档】基于python的花里有话花店管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/13 1:24:34

基于PHP的宠物商城网站的设计与制作

目录PHP宠物商城网站设计摘要系统架构核心功能模块技术亮点扩展性设计成果目标项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作PHP宠物商城网站设计摘要 系统架构 采用B/S架构&#xff0c;前端使用HTMLCS…

作者头像 李华
网站建设 2026/4/11 10:13:19

基于Spring Boot+Vue的生日商城的设计与实现

目录系统概述技术架构核心功能创新点应用价值项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统概述 该项目基于Spring Boot后端框架与Vue.js前端框架&#xff0c;构建了一个专注于生日礼品选购的电子商…

作者头像 李华
网站建设 2026/4/12 18:23:09

【VLN】VLN Paradigm Alg:模仿学习及其细节(3)

这里写自定义目录标题 1. VLN Paradigm2. VLN Paradigm Alg3. 模仿学习3.1 Teacher-forcing 与 Student-forcing 的异同点与搭配使用3.1.1 核心定义&#xff08;一句话区分&#xff09;3.1.2 Teacher-forcing&#xff08;教师强制 离线演示&#xff09;3.1.3 使用方式&#xf…

作者头像 李华
网站建设 2026/4/15 10:53:17

企业软件采购深度测评:如何快速筛选出真正合适的供应商?

会议室里&#xff0c;市场部总监正展示着新CRM软件带来的华丽数据看板&#xff0c;而IT主管却眉头紧锁&#xff0c;担忧着系统接口的兼容性与后续的运维成本。财务负责人则在默默计算着超出预期的订阅费用和隐藏的实施开销。这一幕&#xff0c;在许多企业的软件选型过程中反复上…

作者头像 李华