在Java中,会经常使用到一些并发工具类来处理多线程问题,从而提高系统性能,本文总结一下在开发中常用的工具类。
1. CountDownLatch
java.util.concurrent.CountDownLatch允许一个或多个线程等待其他线程
完成操作后再继续执行。
CountDownLatch latch = new CountDownLatch(1);// 在另一个线程中调用 latch.countDown() 来触发等待线程继续执行latch.await();
2. CyclicBarrier
java.util.concurrent.CyclicBarrier 允许一组线程互相等待
,直到所有线程
都到达某个屏障点后再继续执行。
CyclicBarrier barrier = new CyclicBarrier(3);// 在不同线程中调用 barrier.await() 来等待所有线程到达屏障点
3. Semaphore
java.util.concurrent.Semaphore 允许控制同时访问
特定资源的线程数量,可以用来限制并发访问的线程数量。
Semaphore semaphore = new Semaphore(3); // 允许同时3个线程访问try {semaphore.acquire(); // 获取许可// 执行需要控制并发的操作} catch (InterruptedException e) {e.printStackTrace();} finally {semaphore.release(); // 释放许可}
4. Future
java.util.concurrent.Future 表示异步计算的结果,可以用来获取异步任务的执行结果。
ExecutorService executor = Executors.newSingleThreadExecutor();Future<String> future = executor.submit(() -> {return "Result of the asynchronous computation";});String result = future.get(); // 获取异步任务的执行结果
5. Phaser
java.util.concurrent.Phaser 提供更灵活的线程同步机制,允许线程动态地注册到同步事件中。
Phaser phaser = new Phaser(1);// 在不同线程中调用 phaser.arriveAndAwaitAdvance() 来等待其他线程到达同步点
6. ExecutorService
java.util.concurrent.ExecutorService 用于管理线程的执行,可以提交任务给线程池执行。
ExecutorService executor = Executors.newFixedThreadPool(5);executor.submit(() -> {System.out.println("Task executed in a separate thread");});executor.shutdown();