<分区>
在这段代码中,我使用两个线程来处理两个任务。任务完成后,ExecutorService 关闭。然后它继续处理下一对“sku”和“inputText”。再次创建两个线程来处理这两个任务,然后关闭。它以这种方式继续,直到处理完所有输入。
这是在本地方法中使用多线程的正常方式吗?恐怕在一个方法中频繁创建和关闭 ExecutorService 局部变量可能不太好。
// defined as an instance variable
ExecutorService executorService = Executors.newFixedThreadPool(2);
public ExtractedInfo execute(String sku, String inputText){
ExtractedInfo info = new ExtractedInfo();
Callable<List<Subgraph>> retrieveTask = () -> {
return this.retrieveAllAttributesFromGraph(sku);
};
Callable<String> parseTask = () -> {
return this.executeParser(sku, inputText);
};
Future<List<Subgraph>> retrieveService = executorService.submit(retrieveTask);
Future<String> parseService = executorService.submit(parseTask);
String inputLine = null;
List<Subgraph> allAttributes = null;
try {
inputLine = parseService.get();
allAttributes = retrieveService.get();
}catch(ExecutionException ee){
ee.printStackTrace();
}catch (InterruptedException ie){
ie.printStackTrace();
}
**executorService.shutdown();**
info.setInputLine(inputLine);
info.setAttributes(allAttributes);
return info;
}