Java 并发工具类(java 并发实战)

Java 并发工具类(java 并发实战)

编码文章call10242025-01-26 18:24:5111A+A-

比如:ConcurrentHashMap、AtomicInteger、Semaphore、CyclicBarrier、CountDownLatch、BlockingQueue 等等工具类。


1.ConcurrentHashMap

作用: 是一个线程安全且高效的哈希表,支持并发访问。

用法: 多个线程可以同时进行读写操作,而不会导致线程安全问题。

ConcurrentHashMap map = new ConcurrentHashMap<>();

map.put("key1", 1);

Integer value = map.get("key1");

map.computeIfAbsent("key2", k -> 2);

2. AtomicInteger

作用: 提供一种线程安全的方式对 int 类型进行原子操作,如增减、比较。

用法: 适用于需要频繁对数值进行无锁操作的场景。

AtomicInteger atomicInt = new AtomicInteger(0);
atomicInt.incrementAndGet(); // 递增
atomicInt.decrementAndGet(); // 递减
atomicInt.compareAndSet(1, 2); // 比较并设置

3. Semaphore

作用: 控制访问资源的线程数,可以用来实现限流或访问控制。

用法: 在资源有限的情况下,控制同时访问的线程数量。

Semaphore semaphore = new Semaphore(3);
try {
semaphore.acquire(); // 获取许可
// 执行任务
} finally {
semaphore.release(); // 释放许可
}

4. CyclicBarrier

作用: 让一组线程到达一个共同的同步点,然后一起继续执行。常用于分阶段任务执行。

用法: 适用于需要所有线程在某个点都完成后再继续的场景。

CyclicBarrier barrier = new CyclicBarrier(3, () -> {
System.out.println("所有线程都到达了屏障点");
});
Runnable task = () -> {
try {
// 执行任务
barrier.await(); // 等待其他线程
} catch (Exception e) {
e.printStackTrace();
}
};
new Thread(task).start();
new Thread(task).start();
new Thread(task).start();

5. CountDownLatch

作用: 一个线程(或多个)等待其他线程完成操作。

用法: 适用于主线程需要等待多个子线程完成任务的场景。

CountDownLatch latch = new CountDownLatch(3);
Runnable task = () -> {
try {
// 执行任务
} finally {
latch.countDown(); // 任务完成,计数器减一
}
};
new Thread(task).start();
new Thread(task).start();
new Thread(task).start();
latch.await(); // 等待所有任务完成
System.out.println("所有任务都完成了");

6. BlockingQueue

作用: 是一个线程安全的队列,支持阻塞操作,适用于生产者-消费者模式。

用法: 生产者线程将元素放入队列,消费者线程从队列中取元素,队列为空时消费者线程阻塞。

BlockingQueue queue = new LinkedBlockingQueue<>();
Runnable producer = () -> {
try {
queue.put("item"); // 放入元素
} catch (InterruptedException e) {
e.printStackTrace();
}
};
Runnable consumer = () -> {
try {
String item = queue.take(); // 取出元素
} catch (InterruptedException e) {
e.printStackTrace();
}
};
new Thread(producer).start();
new Thread(consumer).start();

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4