Java并发编程:JUC工具包与底层原理解析

需积分: 40 6 下载量 152 浏览量 更新于2024-07-16 收藏 3.58MB PDF 举报
"JUC并发编程+底层原理注意,一定要是JDK1.8、IDE一定要设置" Java并发编程是Java程序设计中的重要组成部分,尤其是Java Util Concurrent (JUC) 工具包,自JDK 1.5引入以来,它极大地简化了多线程和并发控制的实现。JUC包提供了各种高级并发组件,如线程池、同步器、锁等,旨在提高多线程环境下的程序性能和可维护性。 1. **什么是JUC** JUC,全称Java Util Concurrent,是Java标准库中用于并发编程的一个包,包含了丰富的并发工具类。它提供了一组高级并发构建模块,如`ExecutorService`线程池、`Semaphore`信号量、`CountDownLatch`倒计时门闩、`CyclicBarrier`循环屏障、`Future`异步结果、`Atomic`原子变量类以及各种锁和同步器等。 2. **进程与线程** - **进程**:是操作系统资源分配的基本单位,比如我们运行的QQ.exe和Music.exe就是两个独立的进程。 - **线程**:是程序执行的最小单元,一个进程中可以有多个线程,至少包含一个主线程。在Java中,如main线程和垃圾回收线程都是线程。 3. **并发与并行** - **并发**:在同一时间段内,多个线程交替执行,看起来像是同时进行,但实际上是CPU快速切换线程的结果,适用于单核CPU系统。 - **并行**:在多核或多CPU系统中,多个线程或进程可以真正地同时执行,不依赖于CPU的上下文切换。 4. **线程状态** Java中的线程有六种状态,包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED。这些状态反映了线程从创建到结束的不同阶段。 5. **wait()与sleep()的区别** - **wait()**:属于`Object`类的方法,用于线程间的通信,让当前线程等待,释放持有的锁,直到被其他线程唤醒或超时。 - **sleep()**:属于`Thread`类的方法,让当前线程暂停执行一段时间,不释放锁,时间结束后自动恢复执行。 6. **Lock锁** - **传统synchronized**:Java内置的同步机制,提供了互斥访问,但不具备中断、定时等待和可重入等高级特性。 - **JUC Lock**:如`ReentrantLock`,提供了比`synchronized`更细粒度的控制,支持公平锁、非公平锁、可中断、可选择的定时等待等特性。 7. **多线程编程原则** - **高内聚,低耦合**:确保每个线程只处理其职责范围内的任务,减少线程之间的交互,提高程序的稳定性和可维护性。 - **线程操作资源类**:线程通过调用资源类的公共方法来协作处理共享资源,避免直接操作共享对象。 在实际的企业级开发中,遵循良好的编程规范,如使用JUC提供的并发工具类,可以编写出高效、安全的并发程序。例如,`SaleTicketTest1`示例中,展示了如何使用`Lock`锁和Lambda表达式实现售票服务,模拟了多线程环境下并发售出有限数量的票的过程。