JUC并发编程

Java 并发编程(Java Concurrency)是指在 Java 程序中同时进行多个任务的一种编程方式。Java 提供了一套丰富的并发编程工具,其中包括 Java 并发包(Java Concurrency Utilities,简称 JUC),用于简化并发编程的复杂性。

以下是 Java 并发编程中一些常用的 JUC 工具和概念:

  1. 线程池(Executor Framework)

    • ExecutorService 接口:用于管理和控制线程的执行,提供了提交任务、获取 Future 结果等方法。
    • Executors 工具类:提供了创建不同类型线程池的静态方法。
    ExecutorService executorService = Executors.newFixedThreadPool(5);
    executorService.submit(() -> System.out.println("Task executed in thread pool"));
    
  2. Callable 和 Future

    • Callable 接口:类似于 Runnable,但可以返回结果,并且可以抛出异常。
    • Future 接口:表示异步计算的结果,可以用于获取计算的结果或取消任务的执行。
    Callable<Integer> callableTask = () -> {
        // Perform some computation
        return 42;
    };
    
    Future<Integer> future = executorService.submit(callableTask);
    Integer result = future.get();
    
  3. 并发集合

    • ConcurrentHashMap:线程安全的哈希表。
    • CopyOnWriteArrayListCopyOnWriteArraySet:基于写时复制的并发列表和集合。
    Map<String, String> concurrentMap = new ConcurrentHashMap<>();
    List<String> copyOnWriteList = new CopyOnWriteArrayList<>();
    
  4. 原子操作类

    • AtomicIntegerAtomicLongAtomicReference 等:提供了原子操作的基本类型。
    AtomicInteger atomicInteger = new AtomicInteger(0);
    atomicInteger.incrementAndGet();
    
  5. CountDownLatch

    • 用于等待其他线程完成一组操作。
    CountDownLatch latch = new CountDownLatch(3);
    
    // 在其他线程中调用 latch.countDown(),表示任务完成
    latch.await(); // 阻塞当前线程,直到 latch 计数器减为零
    
  6. CyclicBarrier

    • 用于等待一组线程达到某个屏障点。
    CyclicBarrier barrier = new CyclicBarrier(3);
    
    // 在其他线程中调用 barrier.await(),等待所有线程都到达屏障点
    
  7. Semaphore

    • 用于控制同时访问某个资源的线程数量。
    Semaphore semaphore = new Semaphore(2); // 允许两个线程同时访问
    
    // 在线程中调用 semaphore.acquire() 获取许可,semaphore.release() 释放许可
    
  8. Lock 接口和 ReentrantLock

    • 提供了比使用 synchronized 更灵活的锁定操作。
    Lock lock = new ReentrantLock();
    
    lock.lock();
    try {
        // 执行需要同步的代码块
    } finally {
        lock.unlock();
    }
    

以上是一些 JUC 工具和概念的简要介绍,通过这些工具,Java 并发编程变得更加方便和高效。在实际应用中,具体选择哪种工具取决于任务的性质和要求。

你可能感兴趣的:(并发,JUC)