问题描述
publicvoidrun(){ThreadthisThread=Thread.currentThread();while(blinker==thisThread){try{for(inti=0;i<lists.size();i++){try{url=newURL(lists.get(i).getAddress());httpurlconnection=(HttpURLConnection)url.openConnection();httpurlconnection.setConnectTimeout(1000);if(httpurlconnection.getResponseCode()==200){lists.get(i).setStatut("正常链接");}else{lists.get(i).setStatut("未能链接");}}catch(Exceptione){lists.get(i).setStatut("无效链接");}finally{if(httpurlconnection!=null)httpurlconnection.disconnect();}}System.out.println("线程中目前数据"+lists.size());Thread.sleep(RUN_TIME);}catch(Exceptione){//TODO:handleexception}}}
我在线程中操作list,但是如果数据一多,后面有些数据会不会处理不到?这个地方需要如何改进啊?线程轮训时间现在是1分钟,数据比较少。
解决方案
解决方案二:
没人知道吗?
解决方案三:
数据处理完后线程关闭不就行了嘛
解决方案四:
楼书可以一直运行一个线程,知道数据处理完成,参见生产者/消费者
解决方案五:
引用2楼jycjycfy的回复:
数据处理完后线程关闭不就行了嘛
不是的,这是一个后台检测的程序,线程是不能关闭的。
解决方案六:
引用3楼applerockhool的回复:
楼书可以一直运行一个线程,知道数据处理完成,参见生产者/消费者
你的意思是再开一个线程去处理数据吗?
解决方案七:
这个就看你线程结束的条件是怎么写的。如果按照生产者/消费者模式是不会出现线程结束了还没处理完这种情况
解决方案八:
是不是这个意思?classThreadDemo1{publicstaticvoidmain(String[]args){TestThreadt=newTestThread();newThread(t).start();newThread(t).start();newThread(t).start();newThread(t).start();}}classTestThreadimplementsRunnable{privateList<String>l;publicTestThread(){this.l=newArrayList<String>();for(inti=0;i<100;i++){l.add("address"+String.valueOf(i));}}publicvoidrun(){synchronized(this){while(l.size()>0){System.out.println(Thread.currentThread().getName()+"iscalling"+l.remove(0));this.notifyAll();try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}}}}