Java中的执行者终止递归如何?

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

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();

}

}

如果 ,则规则执行器运行良好,但是如果 将出现错误:线程“

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中的执行者终止递归如何? 的全部内容, 来源链接: utcz.com/qa/407726.html

回到顶部