下面是利用Java代码写一个并行调用模板的完整攻略:
步骤一:创建并发执行器
在 Java 并发编程中,Executor
是一个用于执行被提交的任务的对象。Executors
类提供了一些静态工厂方法,用于创建不同类型的 Executor
。可以使用以下代码片段创建并发执行器:
ExecutorService executor = Executors.newFixedThreadPool(numThreads);
本代码片段通过创建一个固定大小线程池,来创建了一个 ExecutorService
对象。
步骤二:创建任务列表
接下来创建一组要并发运行的任务列表,可以使用 Callable
或者 Runnable
接口来定义它们。Callable
和 Runnable
都提供了一种定义任务行为的方式。
以下是一个 Callable
示例:
Callable<String> task = new Callable<String>() {
public String call() throws Exception {
return "Hello, World!";
}
};
本示例表明有一个可以返回 String
类型结果的任务,它返回了 "Hello, World!" 字符串。
步骤三:提交任务并等待结果
任务提交完成后,使用 invokeAll()
方法来提交任务列表,并等待它们全部完成。这个方法会返回包含所有结果的 Future
列表,每个 Future
对象都代表了一个任务执行的结果。
以下是一个将任务列表提交给并发执行器的代码示例:
List<Callable<String>> taskList = Arrays.asList(task1, task2, task3);
List<Future<String>> futures = executor.invokeAll(taskList);
本示例中,假设已经先创建了 task1
、task2
和 task3
三个 Callable
对象,然后将它们放到 taskList
列表中。
executor.invokeAll(taskList)
代码提交了 taskList
中的所有任务,并等待他们全部完成。这个方法会返回一个 List<Future<String>>
对象,以获取每个任务的执行结果。
步骤四:输出结果
现在,我们可以使用 Future
的 get()
方法,来等待并输出每个任务的结果。这个方法会返回任务的结果,或者在任务没有完成时,会等待其完成。
下面是一个示例代码片段:
for (Future<String> future : futures) {
String result = future.get();
System.out.println(result);
}
本示例会迭代所有 Future 对象,并使用 get()
方法获取每个任务的结果。如果任务没有完成,则该方法会等待它完成。
示例:
下面一个示例中,同时启动5个线程,这些线程的任务都是连续输出数字:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class ParallelExecutionExample {
public static void main(String[] args) throws Exception {
//创建一个并发执行器,数量为5个
ExecutorService executor = Executors.newFixedThreadPool(5);
//创建一个任务列表
List<Callable<String>> taskList = new ArrayList<>();
//向任务列表中添加5个输出数字的任务
for (int i = 1; i <= 5; i++) {
final int num = i;
Callable<String> task = new Callable<String>() {
public String call() throws Exception {
for (int j = 1; j <= 10; j++) {
System.out.println("Thread " + num + " output: " + j);
}
return "";
}
};
taskList.add(task);
}
//提交任务并等待执行结果,返回结果列表,每个结果对应一个任务
List<Future<String>> futures = executor.invokeAll(taskList);
//迭代结果列表,并输出每个结果
for (Future<String> future : futures) {
String result = future.get();
System.out.println(result);
}
//关闭执行器
executor.shutdown();
}
}
运行结果如下:
Thread 1 output: 1
Thread 1 output: 2
Thread 1 output: 3
Thread 1 output: 4
Thread 1 output: 5
Thread 1 output: 6
Thread 1 output: 7
Thread 1 output: 8
Thread 1 output: 9
Thread 1 output: 10
Thread 2 output: 1
Thread 2 output: 2
...
说明示例代码中成功使用 Java 代码实现了并行执行任务的功能,实现了一种并行调用模板。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Java代码写一个并行调用模板 - Python技术站