Re: [問題] Thread 強迫中斷

看板java作者 (Lucifer)時間16年前 (2009/05/27 16:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1A7FcYrr (java)
討論串 (同標題文章)
文章代碼(AID): #1A7FcYrr (java)