[問題] Thread 強迫中斷

看板java作者 (kira)時間15年前 (2009/05/27 11:17), 編輯推噓6(603)
留言9則, 3人參與, 最新討論串1/2 (看更多)
小弟現在實作 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
用Thread.sleep(5000) 比你的無窮迴圈省力啦...--;;
05/27 11:37, 1F

05/27 11:41, , 2F
ArrayList<String> collectUrl=new WebPage("關鍵字")?
05/27 11:41, 2F

05/27 11:47, , 3F
我覺得問題應該在於 td 裡面如何實作...
05/27 11:47, 3F

05/27 11:51, , 4F
還有, 幾個thread共用同一個result, 結果當然混在一起
05/27 11:51, 4F
※ 編輯: killeryagami 來自: 140.109.18.228 (05/27 12:24)

05/27 12:26, , 5F
2F:誤植多個new,改回來了
05/27 12:26, 5F

05/27 12:33, , 6F
共用的原因是,部分執行緒負責同一個關鍵字網頁
05/27 12:33, 6F

05/27 14:23, , 7F
thread 盡量以 logic 來停止. 但真的要app停止時不理
05/27 14:23, 7F

05/27 17:36, , 8F
感謝回答
05/27 17:36, 8F

05/27 18:06, , 9F
(忘了繼續答)不理thread完成與否, 請把thread設daemon
05/27 18:06, 9F
文章代碼(AID): #1A7B31ls (java)
文章代碼(AID): #1A7B31ls (java)