早安我的时区。在动态线程数调用ExecutorService.shutdown
我使用线程池来开发一个小的Http机器人,从链接中行进每个page.When链接我发现了一个新的链接我创建一个新的线程,将探索新的一页。 伪代码。
pool = Executors.newFixedThreadPool(40);
pool.execute(new Exploit(tree.getRoot()));
在这种情况下,漏洞利用是实现Runnable接口,并有机会获得游泳池的内部类,所以每一个线程发现一个链接时,将使用池添加一个新的“线程”像这样:
for(Link n : links){
pool.execute(new Exploit(n));
}
我看到了很多的例子使用的ExecutorService类,但它们都使用相同的代码排序是这样的:
ExecutorService executor = Executors.newFixedThreadPool(NTHREDS);
for (int i = 0; i < 500; i++) {
Runnable worker = new MyRunnable(10000000L + i);
executor.execute(worker);
}
// This will make the executor accept no new threads
// and finish all existing threads in the queue
executor.shutdown();
在上面的代码中,线程数量是静态的,所以w ^母鸡代码调用关闭所有线程已经被添加到pool.I不能按照这个代码,因为在我的情况我没有线程添加的静态数量。我停止状态,更多的线程添加到池是,当我达到了一个搜索深level.So我的问题是,我如何调用executor.shutdown在主线程?有什么类型的连接,我可以在主线程中使用?
在此先感谢。 最好的问候
让我明白:您的系统递归扫描页面中的链接,并为找到的每个链接创建一个扫描任务。这个任务被安排在一个执行器中,并且当没有更多的任务被执行时你想关闭执行器。两个问题:(1)任务如何知道何时停止?即如果我在n级,我知道我应该/还是不扫描级别n + 1?你如何避免链接循环? – maasg 2012-03-21 14:31:46
我的停止条件与级别成就有关。 当新任务看到父级有一个特定级别时,让我们说3,那么这个新任务将有4个,如果停止条件标记为3,那么将立即停止,并且没有更多的任务到池中。 – tt0686 2012-03-22 15:37:20
你是否最终用迄今为止的信息解决了这个问题? – maasg 2012-03-26 10:57:18