[問題] Thread 強迫中斷
小弟現在實作 Thread 去讀取網頁資料
但是在中斷Thread發生一些問題,Code大致如下
public class paserHtml{
public ArrayList<String> paser(){
//蒐集與關鍵字有關的Url
ArrayList<String> collectUrl = WebPage("關鍵字");
ArrayList<String> result = new ArrayList<String>();
for(int i=0;i<collectUrl.size();i++){
MyThread td = new MyThread();
td.setUrl(collectUrl.get(i),result);
//設定要搜尋的Url,將結果存入result
td.start(); //開始撈資料
}
/*
以下設定是為了讓主程式等待Thread執行完畢,
如果超過五秒則主程式結束,忽略五秒後才搜尋到的資料。
*/
long startTime = System.currentTimeMillis();
for(;;){
long timeout = System.currentTimeMillis();
if(timeout>5000)
break;
}
return result;
}
}
此程式執行後由於Url數目眾多,因此產生的Thread也很多
而有另一支程式將搜集許多關鍵字,然後利用本程式撈資料
我想可能是在這部份產生OutOfMemoryException,因此在五秒後
需要強制結束Thread動作,歸還記憶體。
但是Thread的Stop()與destory()都已經deprecated
目前試過的方法是先讓執行緒wait()之後interrupt()丟出Exceptions 然後結束
不過沒有用,跑了一段時間之後還是OutOfMemory
而且很奇怪的是,result應該每次重新new的時候都會配置新位址
所以不同關鍵字的結果應該不會互相干擾,但事實上會
總結問題
1、Thread「似乎」殺不死,一直停留在記憶體中
2、result 結果互相干擾,關鍵字一會影響到關鍵字二
2的問題我還在找,主要是1的問題,我希望五秒後所有Thread停止並釋放空間
不曉得有哪位神手可以解決這個困難,小弟我困擾了兩個星期......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.18.228
推
05/27 11:37, , 1F
05/27 11:37, 1F
推
05/27 11:41, , 2F
05/27 11:41, 2F
推
05/27 11:47, , 3F
05/27 11:47, 3F
推
05/27 11:51, , 4F
05/27 11:51, 4F
※ 編輯: killeryagami 來自: 140.109.18.228 (05/27 12:24)
→
05/27 12:26, , 5F
05/27 12:26, 5F
→
05/27 12:33, , 6F
05/27 12:33, 6F
推
05/27 14:23, , 7F
05/27 14:23, 7F
→
05/27 17:36, , 8F
05/27 17:36, 8F
推
05/27 18:06, , 9F
05/27 18:06, 9F
討論串 (同標題文章)