gpt4 book ai didi

java - java中的执行程序终止递归如何?

转载 作者:行者123 更新时间:2023-11-29 06:56:15 26 4
gpt4 key购买 nike

这是一个程序,它使用递归和执行器读取以前格式的信息站点。它工作正常,我的问题是测试程序是否完成和成功通知。

public class NewClass { 

static String levels[] = { "div.col-md-9 li a", "div#sidebar ul li a" };
static String links = "";

private void getRecursive(String href, int level, final ExecutorService executor) {

if (level > levels.length - 1) {
return;
}

Document doc;
try {
doc = Jsoup.connect(href).get();
Elements elements = doc.select(levels[level]);
final int flevel = ++level;
for (final Element element : elements) {
executor.execute(new Runnable() {
@Override
public void run() {
if (!element.attr("href").isEmpty()) {
links += element.attr("abs:href") + "\n";
System.out.println(links);
getRecursive(element.attr("abs:href"), flevel, executor);
}
}
});
}
} catch (IOException e1) {
e1.printStackTrace();
}
}

如果levels.length = 1,规则执行器运行良好,但如果levels.length>1会出现错误:线程“pool-1-thread中的异常” -138"java.util.concurrent.RejectedExecutionException

    public static void main(String[] args) {    
try {
ExecutorService executor = Executors.newFixedThreadPool(5);
new NewClass().getRecursive("http://www.java2s.com/", 0, executor);
executor.shutdown();
executor.awaitTermination(1, TimeUnit.HOURS);
if (executor.isTerminated()) {
JOptionPane.showMessageDialog(null, "Success");
}
} catch (Exception ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

最佳答案

关闭 ExecutorService 后您无法提交任何新任务,递归似乎在您处理完所有级别后停止(之后您不会提交任何新任务),你可以这样做:

if (level > levels.length - 1) {    
executor.shutdown();
return;
}

关于java - java中的执行程序终止递归如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33512762/

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