【并行计算】- Future和Callable实现并行处理
Callable 是一个泛型接口,也是一个FunctionalInterface, 即函数式接口,
Callable 是一个带有返回值的接口,主要和 Future 一起使用,用在并行计算上,缩减程序运行时间,前提是要保证线程的安全性
1、Callable实现类
package com.sang.callable;
import java.util.List;
import java.util.concurrent.Callable;
public class WorkCallable implements Callable<Integer> {
List<String> list;
public WorkCallable(List<String> list) {
this.list = list;
}
@Override
public Integer call() throws Exception {
for (String s : list) {
System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getId() + ":" + s);
}
Thread.sleep(4000);
return 1;
}
}
2、任务调用
@Test
public void testCallbale() throws InterruptedException, ExecutionException {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
final ExecutorService executor = Executors.newFixedThreadPool(2);
final List<Future<Integer>> results = executor.invokeAll(Arrays.asList(new WorkCallable(Arrays.asList("1-1", "1-2")), new WorkCallable(Arrays.asList("2-1", "2-2"))));
executor.shutdown();
// 合并结果
for (Future<Integer> result : results) {
System.out.println(result.get());
}
stopWatch.stop();
System.out.println(stopWatch.getLastTaskTimeMillis());
}