Re: [問題] Thread 強迫中斷
※ 引述《killeryagami (kira)》之銘言:
: 小弟現在實作 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;
: }
你確定這段有用?怎麼看都很奇怪…
另外,除非你的MyThread裡面是無窮回圈,不然Thread也只會執行一次。
要排程Thread,你可以嘗試使用Timer跟TimerTask。
至於result的結果會互相干涉,應該是你沒有考慮到同步synchronization的問題。
你要讓Thread存取的物件要lock它,加上synchronized試試。
: 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: 118.232.209.234
討論串 (同標題文章)