面试题:Java中并发并行串行的区别

server/2025/1/15 6:55:19/

在 Java 中,并发并行串行是三个常见的概念,它们描述了程序中任务执行的不同方式。虽然它们之间存在某些相似之处,但它们的实现和用途有显著的区别。

1. 串行 (Serial)

串行是指任务按照顺序一个接一个地执行,前一个任务完成后再执行下一个任务。它是最简单的执行方式。

  • 特点:

    • 一个任务在另一个任务之前执行。
    • 只有一个任务在某个时间点执行。
    • 没有任务的并行处理,完全按顺序执行。

这里写一个示例:

java">public class SerialExample {public static void main(String[] args) {task1();  // 执行任务1task2();  // 执行任务2}public static void task1() {System.out.println("Task 1 is executing");}public static void task2() {System.out.println("Task 2 is executing");}
}

2. 并发 (Concurrency)

并发是指多个任务在同一时间段内开始执行,但并不是完全同时进行。它意味着程序中可能有多个任务,但它们并不是同时执行的,而是通过切换线程或任务的执行,给用户“同时进行”的感觉。

  • 特点:

    • 任务是交替执行的,可能会通过时间片轮转来模拟并行。
    • 操作系统和 JVM 可以切换多个线程,使得多个任务在同一时间段内得到处理。
    • 并发并不意味着任务是同时执行的,只是任务被交替执行。
  • 示例:

    java">public class ConcurrencyExample {public static void main(String[] args) {Thread t1 = new Thread(() -> task1());Thread t2 = new Thread(() -> task2());t1.start();  // 启动线程1t2.start();  // 启动线程2}public static void task1() {System.out.println("Task 1 is executing");}public static void task2() {System.out.println("Task 2 is executing");}
    }
    
  • 适用场景:

    • 当任务需要等待其他资源(例如 I/O 操作)时,可以利用 CPU 空闲时间来执行其他任务。
    • 任务之间是独立的,但需要同时进行。

3. 并行 (Parallelism)

并行是指多个任务真正同时执行。在多核处理器或多处理器系统中,任务会在不同的 CPU 核心上同时执行,从而减少总体执行时间。

  • 特点:

    • 任务真正同时执行,可以在多个 CPU 核心上同时进行。
    • 提升了程序执行的效率,特别是对于计算密集型任务。
  • 示例:

    java">public class ParallelExample {public static void main(String[] args) {ForkJoinPool forkJoinPool = new ForkJoinPool();forkJoinPool.submit(() -> {task1();  // 并行执行任务1});forkJoinPool.submit(() -> {task2();  // 并行执行任务2});forkJoinPool.shutdown();}public static void task1() {System.out.println("Task 1 is executing");}public static void task2() {System.out.println("Task 2 is executing");}
    }
    
  • 适用场景:

    • 任务是计算密集型的,可以通过多个 CPU 核心同时执行来加速处理。
    • 需要显著减少任务的执行时间。

区别总结

特性串行 (Serial)并发 (Concurrency)并行 (Parallelism)
执行方式一个接一个顺序执行任务交替执行,通过多线程模拟任务真正同时执行,多个线程或 CPU 核心
任务依赖性任务之间可能有依赖任务可能是独立的,交替执行任务独立,完全并行执行
实现方式单线程,按顺序执行多线程,但任务不是完全同时执行多线程或多进程,任务同时执行
适用场景简单任务,顺序执行任务之间相互独立,需要多任务计算密集型任务,充分利用多核
性能影响执行慢,受限于单核处理可能提高效率,但受限于单核大幅提升执行效率,减少时间

总结

  • 串行:任务按顺序执行。
  • 并发:多个任务交替执行,通过线程调度模拟“同时”进行。
  • 并行:多个任务真正同时执行,通常需要多核或多处理器支持。

 


http://www.ppmy.cn/server/158483.html

相关文章

微服务之松耦合

参考:https://microservices.io/post/architecture/2023/03/28/microservice-architecture-essentials-loose-coupling.html There’s actually two different types of coupling: runtime coupling - influences availability design-time coupling - influences…

通信网络安全分层及关键技术解决

要实现信息化,就必须重视信息网络安全。信息网络安全绝不仅是IT行业的问题,而是一个社会问题,是一个包括多学科的系统安全工程问题,并直接关系到国家安全。因此,知名安全专家沈昌祥院士呼吁,要像重视两弹一…

【机器人】SceneGrasp 同时支持3D物体重建、6D位姿估计、抓取点估计

本文分享SceneGrasp,它来自IROS2023,同时支持物体分类、3D物体重建、6D位姿估计、抓取点估计。 它是一种快速、高效且同时处理多个任务的方法,能够使机器人更好地理解和操作其环境。 同时处理多个任务,实现任务之间共享信息&…

通过mysql的*.frm和*ibd文件恢复原有数据

背景:MySQL数据丢失,只剩下frm和ibd结尾的文件,由于先前没有备份也没开启binlog现在只能通过这两个文件来恢复数据。 如果也是MySQL数据丢失,但是有frm和ibd文件可以通过此文档来解决MySQL数据丢失的问题 安装MySQL Utilities …

用AI技术提升Flutter开发效率:ScriptEcho的力量

引言 在当今快速发展的技术时代,Flutter作为一种跨平台开发框架,正在越来越多的开发者中崭露头角。它不仅能够为开发者提供一套代码同时部署到iOS和Android平台的解决方案,还能帮助企业节省人力成本和开发时间。然而,对于新手开发…

(蓝桥杯)使用前缀和与二分查找解决子数组和问题——不太甜的糖果

题目描述 小Y走啊走啊,翻山越岭、跋山涉水,终于,小Y累了。虽然,糖果的诱惑强大,但他的两条腿已经不听使唤,只能坐在地上叹气,内心无比焦急…… 突然眼前一黑,小Y没有昏过去,但是眼前出现了一个糖人。在这无人之地,小Y没有别的办法,只得求助糖人。 善良的糖人没法拒绝…

Elasticsearch入门篇

1.介绍 Elasticsearch 1.1.什么是 Elasticsearch? Elasticsearch 是一种开源的搜索和分析引擎,专门用于处理大规模的数据,并以非常快的速度进行搜索和分析。它基于一个叫做 Apache Lucene 的库构建,但与 Lucene 相比,…

基于Java+SpringMvc+Vue技术的宠物分享平台

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…