早安我的時區。在動態線程數調用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