java如何并行
并行编程方法
Java中实现并行编程主要通过多线程、线程池、Fork/Join框架以及并行流(Parallel Stream)等方式。以下是具体实现方法:
多线程基础
通过继承Thread类或实现Runnable接口创建线程:
class MyThread extends Thread {
public void run() {
System.out.println("Thread running");
}
}
// 启动线程
new MyThread().start();
// 或实现Runnable
new Thread(() -> System.out.println("Runnable running")).start();
线程池管理
使用ExecutorService管理线程池,避免频繁创建销毁线程的开销:
ExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(() -> System.out.println("Task executed"));
executor.shutdown(); // 关闭线程池
Fork/Join框架
适用于分治任务的并行处理,通过RecursiveTask或RecursiveAction实现:

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));
并行流处理
利用Stream API的parallel()方法实现数据并行处理:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.parallelStream().mapToInt(i -> i).sum();
并发工具类
Java提供了一系列并发工具类来简化并行编程:

CountDownLatch
等待多个线程完成后再继续主线程:
CountDownLatch latch = new CountDownLatch(3);
for (int i = 0; i < 3; i++) {
new Thread(() -> {
System.out.println("Thread finished");
latch.countDown();
}).start();
}
latch.await(); // 等待所有线程完成
CyclicBarrier
多个线程相互等待到达屏障点:
CyclicBarrier barrier = new CyclicBarrier(3, () -> System.out.println("All threads reached"));
for (int i = 0; i < 3; i++) {
new Thread(() -> {
barrier.await(); // 等待其他线程
}).start();
}
CompletableFuture
异步编程和组合多个异步操作:
CompletableFuture.supplyAsync(() -> "Hello")
.thenApplyAsync(s -> s + " World")
.thenAcceptAsync(System.out::println);
注意事项
- 线程安全:共享资源需使用
synchronized或ReentrantLock保证原子性。 - 避免死锁:确保锁的获取顺序一致。
- 性能监控:使用
ThreadMXBean监控线程状态和性能。 - 资源限制:根据硬件调整线程池大小(通常为CPU核心数的1-2倍)。
以上方法可根据具体场景选择,数据密集型任务推荐并行流,复杂任务分解适合Fork/Join,而异步处理则优先考虑CompletableFuture。






