我正在研究爬網程序,它在JAVA中以24x7的方式爬完整個web。Java中的線程問題
爲了提高抓取速度,我在其中實現了線程。但這是我無法理解的。
考慮下面的代碼:
for(int i=0; i<no_of_threads; i++){
new Thread("" + i){
public void run()
{
try
{
System.out.println("Instance: " + getName() + " running");
getSeed();
Thread.sleep(1000);
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("Thread could not start: "+getName());
}
}
}.start();
}
首先,程序將顯示以下輸出:
Instance: 5 running
Instance: 6 running Instance: 4 running Instance: 3 running Instance: 2 running Instance: 1 running
Instance: 7 running Instance: 0 running
Instance: 8 running
Instance: 9 running
在此之後,將其與正常執行,並且程序連續運行一段時間開始。 突然,我得到:
Thread could not start: 6
和程序連續一段時間。然後,
Thread could not start: 9
並突然停止所有線程。
只有在線程啓動時處理異常時,纔會給出消息「線程無法啓動」。但是,既然它已經顯示「實例運行」,這意味着線程已經在運行。
我不明白爲什麼以及如何發生。
檢查內存,更改ulimit,但更重要的是,分享getSeed和異常 –
只是一個瘋狂的猜測,但你有沒有嘗試同步'getSeed()'? – deanosaur
睡眠(1000)爲? –