java如何实现并行
并行编程的基本概念
Java中并行编程主要通过多线程实现,利用java.util.concurrent包提供的工具类、线程池和并发数据结构。核心目标是充分利用多核CPU资源,提高程序执行效率。
使用Thread类创建线程
通过继承Thread类或实现Runnable接口创建线程:
class MyThread extends Thread {
public void run() {
System.out.println("Thread running");
}
}
// 启动线程
new MyThread().start();
// 或实现Runnable
Runnable task = () -> System.out.println("Runnable running");
new Thread(task).start();
使用ExecutorService管理线程池
避免频繁创建销毁线程,推荐使用线程池:
ExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(() -> {
System.out.println("Task executed by thread pool");
});
executor.shutdown(); // 关闭线程池
使用Fork/Join框架
适用于任务可拆分的场景(如递归分治):
class FibonacciTask extends RecursiveTask<Integer> {
final int n;
FibonacciTask(int n) { this.n = n; }
protected Integer compute() {
if (n <= 1) return n;
FibonacciTask f1 = new FibonacciTask(n - 1);
f1.fork();
FibonacciTask f2 = new FibonacciTask(n - 2);
return f2.compute() + f1.join();
}
}
// 使用
ForkJoinPool pool = new ForkJoinPool();
int result = pool.invoke(new FibonacciTask(10));
使用CompletableFuture异步编程
简化异步任务编排,支持链式调用:
CompletableFuture.supplyAsync(() -> "Hello")
.thenApplyAsync(s -> s + " World")
.thenAcceptAsync(System.out::println);
并发集合与同步工具
- 并发集合:如
ConcurrentHashMap、CopyOnWriteArrayList - 同步工具:
CountDownLatch、CyclicBarrier、SemaphoreCountDownLatch latch = new CountDownLatch(3); IntStream.range(0, 3).forEach(i -> new Thread(() -> { System.out.println("Task done"); latch.countDown(); }).start() ); latch.await(); // 等待所有任务完成
注意事项
- 线程安全:避免共享资源竞争,使用
synchronized或ReentrantLock - 性能监控:通过JMX或工具(如VisualVM)分析线程状态
- 避免死锁:按固定顺序获取多把锁,或使用
tryLock超时机制







