gpt4 book ai didi

java - 了解给定代码的代码执行路径

转载 作者:行者123 更新时间:2023-12-02 05:57:19 25 4
gpt4 key购买 nike

我是 Java 新手,谁能解释一下哪个方法调用下面给出的代码中的 call 方法,还帮助我理解给定代码的代码执行路径:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class MyCallable implements Callable<String> {

@Override
public String call() throws Exception {
Thread.sleep(1000);
return Thread.currentThread().getName();
}

public static void main(String args[]){
//Get ExecutorService from Executors utility class, thread pool size is 10
ExecutorService executor = Executors.newFixedThreadPool(10);
List<Future<String>> list = new ArrayList<Future<String>>();
Callable<String> callable = new MyCallable();

for(int i=0; i< 100; i++){
Future<String> future = executor.submit(callable);
list.add(future);
}

for(Future<String> fut : list){
try {
System.out.println(new Date()+ "::"+fut.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
executor.shutdown();
}
}

最佳答案

代码向包含 10 个线程的 ExecutorService 提交 Callable 100 次,并捕获指示每个 Callable 何时运行的 Future。

ExecutorService executor = Executors.newFixedThreadPool(10);            
List<Future<String>> list = new ArrayList<Future<String>>();
Callable<String> callable = new MyCallable();

for (int i = 0; i < 100; i++)
{
Future<String> future = executor.submit(callable);
list.add(future);
}

一旦 10 个线程中的每一个都运行一个 Callable,剩余的 Callable 将排队并在每个线程可用时运行。

添加所有 Callable 后,下一个代码块会从每个 Future 获取结果,重要的是调用线程将阻塞在对 Future.get 的调用上,直到 Callable 完成,因此结果将是按照添加 Callable 的顺序打印。

for(Future<String> fut : list)
{
try
{
System.out.println(new Date() + "::" + fut.get());
}
catch (InterruptedException | ExecutionException e)
{
e.printStackTrace();
}
}

最后执行器被关闭以杀死它包含的线程。

executor.shutdown();

关于java - 了解给定代码的代码执行路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22962782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com