理解Java JUC并发编程:进程与线程的区别与ZFS笔记

需积分: 0 1 下载量 184 浏览量 更新于2024-06-26 收藏 9.27MB PDF 举报
JUC编程笔记中的"JUC编程"主要讨论了Java并发编程(Java Util Concurrency, JUC)的相关概念和技术,涉及的关键知识点包括进程与线程、并发与并行以及它们之间的关系。以下是详细的解释: 1. **进程与线程**: - 进程是程序在操作系统中的独立执行实体,它有自己的地址空间和系统资源,包括内存、I/O等。每个程序运行时都对应一个或多个进程,例如记事本、浏览器等可以同时运行多个进程。 - 线程则是进程内的一个执行单元,一个进程可以包含多个线程,它们共享进程的资源,如内存。Java中,线程是调度的基本单位,进程更多地被视为资源分配和隔离的单元。 - 在Windows中,进程是资源分配的基本单位,而线程是活动执行单元。进程间通信(IPC)更为复杂,涉及内核层面的支持,如不同计算机间的通信则需要网络协议。 2. **并发与并行**: - 即使在单核CPU环境下,由于任务调度器的高效工作,通过快速线程切换,多个线程看似同时运行,实现的是微观上的串行执行和宏观上的并发性。这种现象被称为并发。 - 并行是指在同一时刻真正意义上同时执行多个任务,多核CPU提供了并行执行的可能性,每个核心可以独立调度线程,从而实现真正的并行处理。 - Rob Pike的观点强调了并发是对多任务同时处理的能力,而并行则是同时执行多个任务的能力。例如,一个家庭场景中,尽管只有一个主妇,但她在做多个事情(并发),而雇佣多个保姆时,所有任务可以同时进行(并行),但也可能涉及到资源竞争问题。 3. **Java并发编程工具**: - JUC库提供了丰富的并发工具,如`Executor`框架、`Future`和`Callable`接口、`ThreadLocal`等,帮助开发者管理和协调多个线程,避免同步问题。 4. **线程上下文切换成本**: - 线程相对于进程更轻量级,切换线程的成本通常低于切换进程,因为线程共享进程的内存,所以它们之间的通信更便捷。 JUC编程笔记主要围绕进程和线程的差异,以及如何利用Java并发编程技术有效地设计和实现多线程应用,确保在多核处理器环境下最大限度地发挥性能优势,同时处理好线程同步和资源竞争问题。