淘先锋技术网

首页 1 2 3 4 5 6 7

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) {
Futurefuture = executor.submit(new CalculateTask(number));
result.add(future);
}
// 统计结果
int sum = 0;
for (Futurefuture : 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线程池在多个线程中并行处理数字列表,并最终统计结果。每个线程都会执行一个计算任务,将计算结果返回给主线程,然后主线程将其加总。