Java并发编程:JUC深度解析

需积分: 13 2 下载量 77 浏览量 更新于2024-08-29 收藏 71KB MD 举报
"JUC并发编程的学习笔记,涵盖了进程与线程的概念、Java中线程的创建及状态、并发与并行的区别以及Lock锁的使用。" 在Java并发编程中,JUC(Java Concurrency Utility)提供了丰富的工具和接口来帮助开发者高效地处理多线程问题。本文档主要探讨了以下几个关键知识点: 1. **进程与线程** - **进程** 是操作系统分配资源的基本单位,它包含了多个线程。例如,当你打开QQ,整个QQ程序就是一个进程,而每个聊天窗口则对应进程中的一个线程。 - **线程** 是进程中的执行单元,它们共享进程的资源,并可以并发执行。Java虚拟机(JVM)默认启动两个线程:主线程(main thread)和垃圾回收线程(GC thread)。 2. **线程的状态** - Java中定义了线程的五种状态:`NEW`(新建),`RUNNABLE`(可运行),`BLOCKED`(阻塞),`WAITING`(等待),`TIMED_WAITING`(定时等待),和`TERMINATED`(终止)。这些状态描述了线程在不同条件下的行为。 3. **线程的创建与控制** - Java虽然提供了`Thread`类来创建线程,但实际的线程启动是通过本地方法(如`start0()`)实现的,这是由JVM底层的C++代码完成的。 - `wait()` 和 `sleep()` 都用于线程暂停,但使用场景不同。`wait()` 必须在同步环境中使用,会释放持有的锁;而`sleep()` 可以在任何地方使用,它不释放锁。 4. **并发与并行** - **并发** 指的是多个事件在一段时间内交替执行,如同一时间有多个线程在CPU的不同核心上执行,但在单核CPU上表现为交替执行。 - **并行** 指的是多个事件在同一时刻真正地同时执行,这通常需要多核CPU支持。 5. **Lock锁** - **Lock** 是Java中的一种高级锁定机制,提供了比`synchronized`更细粒度的控制。例如,使用`ReentrantLock`可以实现可中断的等待和尝试获取锁。 - 传统的`synchronized`关键字基于 monitors(监视器)模型,其本质类似于一个队列,线程在等待锁时会被放入队列,确保同一时刻只有一个线程执行临界区代码。 在实际开发中,理解这些概念和机制对于编写高效、线程安全的代码至关重要。JUC库提供了诸如`Semaphore`(信号量)、`CyclicBarrier`(循环屏障)、`CountDownLatch`(倒计时器)等工具,可以帮助我们更好地管理和控制并发任务。掌握这些工具的使用,可以使我们的程序在多线程环境下运行得更加稳定和高效。