Java中的并行和并发是什么意思呢?在多线程编程时,这两个概念比较常见。简单地说,它们都是用来加速程序运行的,但是在实现上有所不同。
并行指的是在同一时刻,有多个线程在进行运算,这些线程之间是独立的,互不干扰。并行的目的是让多个线程对于同一个问题同时进行处理,从而达到加速的效果。Java中提供了一些工具来支持并行处理,比如线程池以及并发包中的一些类。
而并发则指同时有多个线程在运行,多个线程之间并不完全独立,而是会相互影响。当多个线程操作共享的资源时,就会出现线程安全问题。Java中的并发包提供了一些工具来解决线程安全问题,比如锁。
// 简单的Java并行处理示例 public class ParallelDemo { public static void main(String[] args) { long startTime = System.currentTimeMillis(); // 创建一个包含4个线程的线程池 ExecutorService executor = Executors.newFixedThreadPool(4); Listnumbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 在4个线程中并行处理数字列表 List >result = new ArrayList<>(); for (int number : numbers) { Future future = executor.submit(new CalculateTask(number)); result.add(future); } // 统计结果 int sum = 0; for (Future future : result) { try { sum += future.get(); // 调用get()方法获取线程结果 } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } // 关闭线程池 executor.shutdown(); System.out.println("总和为:" + sum); System.out.println("用时:" + (System.currentTimeMillis() - startTime) + "ms"); } } class CalculateTask implements Callable { private final int number; public CalculateTask(int number) { this.number = number; } @Override public Integer call() { try { Thread.sleep(1000); // 模拟任务执行 } catch (InterruptedException e) { e.printStackTrace(); } return number * number; } }
上述示例代码展示了如何利用Java线程池在多个线程中并行处理数字列表,并最终统计结果。每个线程都会执行一个计算任务,将计算结果返回给主线程,然后主线程将其加总。