java 如何处理并发
Java 并发处理机制
Java 提供了多种机制来处理并发编程,确保线程安全和高效执行。以下是几种核心方法:
线程基础
创建线程有两种主要方式:继承 Thread 类或实现 Runnable 接口。推荐使用 Runnable,因为它更灵活且支持多继承。
class MyRunnable implements Runnable {
public void run() {
System.out.println("Thread running");
}
}
Thread thread = new Thread(new MyRunnable());
thread.start();
线程池
使用 ExecutorService 管理线程池,避免频繁创建和销毁线程的开销。Executors 工厂类提供了多种线程池配置。
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> {
System.out.println("Task executed by thread pool");
});
executor.shutdown();
同步机制
synchronized 关键字用于实现同步,确保同一时间只有一个线程访问共享资源。可以修饰方法或代码块。
public synchronized void syncMethod() {
// 同步方法
}
public void syncBlock() {
synchronized(this) {
// 同步代码块
}
}
锁机制
ReentrantLock 提供了比 synchronized 更灵活的锁控制,支持公平锁、可中断锁和超时锁。
Lock lock = new ReentrantLock();
lock.lock();
try {
// 临界区代码
} finally {
lock.unlock();
}
并发集合
Java 提供了一系列线程安全的集合类,如 ConcurrentHashMap、CopyOnWriteArrayList 等,适用于高并发场景。
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("key", 1);
原子变量
java.util.concurrent.atomic 包中的原子类(如 AtomicInteger)提供了无锁的线程安全操作。
AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();
并发工具类
CountDownLatch、CyclicBarrier 和 Semaphore 等工具类用于协调多个线程之间的执行。
CountDownLatch latch = new CountDownLatch(3);
latch.countDown();
latch.await();
异步编程
CompletableFuture 支持异步编程,可以链式组合多个异步操作。
CompletableFuture.supplyAsync(() -> "Hello")
.thenApply(s -> s + " World")
.thenAccept(System.out::println);
线程安全设计
避免共享状态,使用不可变对象和线程局部变量(ThreadLocal)减少同步需求。

ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);
threadLocal.set(1);
int value = threadLocal.get();
注意事项
- 避免死锁:确保锁的获取顺序一致。
- 减少锁粒度:只锁定必要的代码段。
- 性能监控:使用工具分析线程争用和锁开销。
以上方法涵盖了 Java 并发编程的主要方面,根据具体场景选择合适的技术组合。






