当前位置: 首页 > news >正文

并发 -- JUC(java.util.concurrent) 包的简单介绍

1️⃣ JUC 包概述

   java.util.concurrent(简称 JUC)是 Java 5 引入的并发工具包,用于解决多线程编程中的复杂问题,主要特点:

  • 提供线程安全的类和工具

  • 提供高性能的并发数据结构

  • 提供线程池和任务调度机制

  • 提供原子操作类和锁机制,替代传统 synchronizedwait/notify


2️⃣ 核心概念

2.1 锁机制

  • ReentrantLock

    • 可重入锁,类似 synchronized,支持公平锁和非公平锁

    • 方法:

      • lock() / unlock()

      • tryLock()

      • lockInterruptibly()

    • 支持 Condition,实现类似 wait/notify 功能

  • ReadWriteLock / ReentrantReadWriteLock

    • 读写锁,支持多读单写

    • 方法:

      • readLock().lock() / readLock().unlock()

      • writeLock().lock() / writeLock().unlock()

  • StampedLock

    • 更高性能的锁,支持乐观读锁


2.2 并发集合

  • ConcurrentHashMap

    • 高性能线程安全哈希表,替代 Hashtable

    • JDK1.8 后基于 CAS + 链表/红黑树

  • CopyOnWriteArrayList / CopyOnWriteArraySet

    • 读多写少场景,写操作会复制数组

  • BlockingQueue(阻塞队列)

    • 常用实现:

      • ArrayBlockingQueue(数组队列,有界)

      • LinkedBlockingQueue(链表队列,可选界)

      • PriorityBlockingQueue(优先级队列)

      • DelayQueue(延迟队列)

    • 支持阻塞操作:put()take()


2.3 线程池

  • Executor / ExecutorService

    • Executor:执行任务接口

    • ExecutorService:可提交任务、管理线程池

  • ThreadPoolExecutor

    • 核心类,线程池底层实现

    • 关键参数:

      • corePoolSizemaximumPoolSize

      • keepAliveTime

      • BlockingQueue<Runnable>

      • 拒绝策略(AbortPolicy、CallerRunsPolicy 等)

  • ScheduledThreadPoolExecutor

    • 支持定时/周期性任务

  • Executors 工具类

    • 创建常用线程池:

      • newFixedThreadPool(n)

      • newCachedThreadPool()

      • newSingleThreadExecutor()

      • newScheduledThreadPool(n)


2.4 同步辅助类

  • CountDownLatch

    • 用于等待其他线程完成,倒计时锁存器

  • CyclicBarrier

    • 用于多个线程相互等待,屏障同步

  • Semaphore

    • 信号量,控制同时访问资源的线程数量

  • Exchanger

    • 两个线程交换数据


2.5 原子操作类

  • AtomicInteger / AtomicLong / AtomicReference

    • 基于 CAS 实现,原子更新变量

    • 方法:get() / set() / incrementAndGet() / compareAndSet()


2.6 Future & Callable

  • Callable<V>

    • 可返回结果的任务

  • Future<V>

    • 表示异步计算结果,可 get() 阻塞获取结果

  • FutureTask<V>

    • 可作为 Runnable 使用,也可作为 Future 获取结果


2.7 LockSupport

  • 提供低级阻塞/唤醒方法

  • park() 阻塞当前线程

  • unpark(thread) 唤醒指定线程

  • 是 JUC 中很多工具类(如 ConcurrentLinkedQueue)的底层实现基础


3️⃣ 使用建议

  1. :优先使用 JUC 提供的 ReentrantLock 或读写锁,避免手动 synchronized 复杂场景。

  2. 集合:推荐使用 ConcurrentHashMapCopyOnWriteArrayList,而非手动同步 HashMap / ArrayList

  3. 线程池:尽量使用线程池而不是自己创建 Thread,控制线程数量,减少资源消耗。

  4. 同步辅助类:合理选择 CountDownLatchCyclicBarrierSemaphore 等,解决复杂线程协调问题。

  5. 原子操作:简单计数、状态标记优先考虑 AtomicInteger 等原子类,避免锁。


📌 总结:
JUC 包是 Java 并发编程的核心工具箱,它提供了:

  • 锁机制(可替代 synchronized)

  • 线程池(高效管理线程)

  • 原子操作类(无锁线程安全)

  • 并发集合(线程安全容器)

  • 同步辅助工具(线程协调与控制)

  • Future/Callable(异步任务管理)

http://www.xdnf.cn/news/1423423.html

相关文章:

  • NebulaAI V2.7.0发布:MCP广场正式上线!
  • FFMPEG 10BIT下 Intel b570 qsv 硬解AV1,H265视频编码测试
  • 【项目思维】贪吃蛇(嵌入式进阶方向)
  • 光学神经网络与人工智能应用
  • 【XR技术概念科普】详解6DoF:为什么它是沉浸感的关键?
  • 贝叶斯向量自回归模型 (BVAR)
  • 【Java】Redis(中间件)
  • 从API调用到效果呈现:面具特效功能在直播美颜SDK中的应用实践
  • Redis 八股
  • 中国家具百强「库斯家居」携手 企企通:启动 SRM 项目,构筑采购数字化新生态
  • Android/Java 中创建类实例的各种模式
  • nestjs 发起请求 axios
  • 3-6〔OSCP ◈ 研记〕❘ WEB应用攻击▸WEB应用枚举B
  • 【STM32】状态机(State Machine)
  • 证明与激励:Walrus 可编程数据如何通过激励可用性证明获得安全性
  • SpringBoot学习日记 Day9:响应式编程新世界探索
  • 【跨境知识】密文面单
  • Linux常用命令行大全:14个核心指令详解+实战案例
  • 多线程——线程的休眠、中断和等待
  • Markdown 语法全面指南
  • Win10系统获取网络上行流量的三种方法
  • 五、导入现有模型
  • 01 2025最新VMware虚拟机下载教程
  • Unity项目基本风格/规范
  • Linux上perf工具的使用-基础采样
  • 命名空间级别应用 Pod 安全标准
  • 从组分到涌现:系统科学视域下结构、功能与层级的辨析及在人工智能中的应用
  • 安全等保复习笔记
  • 大模型 RAG 项目必看:技术架构拆解 + 实战步骤,新手也能快速上手
  • 内存管理 - 从虚拟到物理