作者zeat (Lucifer)
看板java
标题Re: [问题] Thread 强迫中断
时间Wed May 27 16:28:15 2009
※ 引述《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