java获取多线程执行完的结果

Java获取多线程执行完的结果,可以使用Java自带的Future和Callable接口来实现。以下是一个示例代码:

  1. 实现Callable接口
    我们需要定义一个实现了Callable接口的类,用于执行多线程任务并返回结果。以下是一个示例代码:
public class MyCallable implements Callable<Integer> {
    public Integer call() throws Exception {
        // 在这里编写多线程执行的代码
        return 1;
    }
}

在上面的代码中,我们实现了Callable接口,并在call方法中编写了多线程执行的代码,并返回了一个Integer类型的结果。
2. 使用ExecutorService提交任务
我们需要使用ExecutorService提交任务,并获得Future对象来获取多线程执行的结果。以下是一个示例代码:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(new MyCallable());
try {
    Integer result = future.get(); // 获取线程执行结果
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
} finally {
    executor.shutdown();
}

在上面的代码中,我们使用ExecutorService创建了一个单线程的线程池,并使用submit方法提交了一个MyCallable任务,并获得了一个Future对象。在try块中,我们使用get方法来获取多线程执行的结果,如果线程被中断或者执行出错,会抛出InterruptedException和ExecutionException异常。在finally块中,我们调用了executor的shutdown方法来关闭线程池。
3. 处理多个Future对象
如果我们需要同时执行多个任务,可以将多个Future对象放入一个List中,并使用invokeAll方法来执行这些任务。以下是一个示例代码:

ExecutorService executor = Executors.newFixedThreadPool(10);
List<Future<Integer>> futures = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    futures.add(executor.submit(new MyCallable()));
}
try {
    for (Future<Integer> future : futures) {
        Integer result = future.get(); // 获取线程执行结果
        System.out.println(result);
    }
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
} finally {
    executor.shutdown();
}

在上面的代码中,我们使用ExecutorService创建了一个固定大小为10的线程池,并使用submit方法提交了10个MyCallable任务,并将这些Future对象放入了一个List中。在try块中,我们使用for循环遍历这些Future对象,并使用get方法来获取多线程执行的结果,最后输出结果。在finally块中,我们调用了executor的shutdown方法来关闭线程池。
以上就是使用Java自带的Future和Callable接口来获取多线程执行结果的示例代码。

你可能感兴趣的:(java,jvm,开发语言)