java线程的run()没有返回值怎么办?
用线程Thread执行一些方法后,需要判断执行是否成功。
publicvoidrun(){}
run()方法返回值是空,怎么办?
解决方法:
- Note
- 使用call()方法
- Callable接口是jdk5后新增的接口
代码:
packagecom.example.thread; importjava.io.IOException; importjava.io.InputStream; importjava.net.HttpURLConnection; importjava.net.MalformedURLException; importjava.net.URL; importjava.util.concurrent.Callable; importandroid.util.Log; importcom.example.StreamTool.StreamTool; publicclassMyThread1implementsCallable<String>{ privatestaticfinalStringtag="xxxyyy"; privateStringphone; privateStringname; publicMyThread1(Stringname,Stringphone){ this.name=name; this.phone=phone; } //publicMyThread1(Stringname,Stringphone){ //super(name); //this.phone=phone; //} //publicvoidrun(){ //Log.i(tag,Thread.currentThread().getName()+"......start"); //Stringnewpath="http://www.dianping.com/ajax/json/account/reg/mobile/send?m="+phone+"&flow=t&callback=DP._JSONPRequest._5"; //StringBuilderstrBui=newStringBuilder(newpath); // //try{ //URLurl=newURL(strBui.toString()); //HttpURLConnectioncon=(HttpURLConnection)url.openConnection(); //con.addRequestProperty("Content-Type","text/html;charset=UTF-8"); //con.addRequestProperty( //"User-Agent", //"Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,likeGecko)Chrome/38.0.2125.104Safari/537.36"); //con.addRequestProperty("Cookie","_hc.v=\"\\\"0ffcdf91-a4d6-4b08-8800-3d59d2e2fe45.1413899372\\\"\";abtest=\"48,124\\|52,133\\|47,122\\|44,106\\|45,115\";__utma=1.29319792.1412090870.1413609669.1413645970.5;__utmz=1.1413645970.5.2.utmcsr=t.dianping.com|utmccn=(referral)|utmcmd=referral|utmcct=/xian;_tr.u=7dhY0yFhd9rY065F;tc=17;cy=17;cye=xian;t_rct=2172824|2171729|6457678;PHOENIX_ID=0a01743f-1492e1321c8-46e6a;13.t=17deda7d2a7d8e46d84bf12a74627b72;13.ts=cd3bd6495620e2a204912c4bdfd43220;thirdtoken=891671FC6B450418DD6E0611A3E4CF48;_hc.v=\"\\\"1bdad871-405e-46e3-97d6-46571ad48e14.1413897928\\\"\";_tr.s=Zy1Ca2OAe1ptv06o;JSESSIONID=891671FC6B450418DD6E0611A3E4CF48"); //con.addRequestProperty("Referer","http://t.dianping.com/register"); //con.setConnectTimeout(5000); //con.setRequestMethod("GET"); // //if(con.getResponseCode()==200){ //InputStreaminputStr=con.getInputStream(); //Stringinfo=newString(StreamTool.read(inputStr),"UTF-8"); //Log.i(tag,Thread.currentThread().getName()+info); //} //}catch(MalformedURLExceptione){ ////TODOAuto-generatedcatchblock //e.printStackTrace(); //}catch(IOExceptione){ ////TODOAuto-generatedcatchblock //e.printStackTrace(); //}catch(Exceptione){ ////TODOAuto-generatedcatchblock //e.printStackTrace(); //} // // //} @Override publicStringcall()throwsException{ Log.i(tag,Thread.currentThread().getName()+"......start"); Stringnewpath="http://www.dianping.com/ajax/json/account/reg/mobile/send?m="+phone+"&flow=t&callback=DP._JSONPRequest._5"; StringBuilderstrBui=newStringBuilder(newpath); try{ URLurl=newURL(strBui.toString()); HttpURLConnectioncon=(HttpURLConnection)url.openConnection(); con.addRequestProperty("Content-Type","text/html;charset=UTF-8"); con.addRequestProperty( "User-Agent", "Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,likeGecko)Chrome/38.0.2125.104Safari/537.36"); con.addRequestProperty("Cookie","_hc.v=\"\\\"0ffcdf91-a4d6-4b08-8800-3d59d2e2fe45.1413899372\\\"\";abtest=\"48,124\\|52,133\\|47,122\\|44,106\\|45,115\";__utma=1.29319792.1412090870.1413609669.1413645970.5;__utmz=1.1413645970.5.2.utmcsr=t.dianping.com|utmccn=(referral)|utmcmd=referral|utmcct=/xian;_tr.u=7dhY0yFhd9rY065F;tc=17;cy=17;cye=xian;t_rct=2172824|2171729|6457678;PHOENIX_ID=0a01743f-1492e1321c8-46e6a;13.t=17deda7d2a7d8e46d84bf12a74627b72;13.ts=cd3bd6495620e2a204912c4bdfd43220;thirdtoken=891671FC6B450418DD6E0611A3E4CF48;_hc.v=\"\\\"1bdad871-405e-46e3-97d6-46571ad48e14.1413897928\\\"\";_tr.s=Zy1Ca2OAe1ptv06o;JSESSIONID=891671FC6B450418DD6E0611A3E4CF48"); con.addRequestProperty("Referer","http://t.dianping.com/register"); con.setConnectTimeout(5000); con.setRequestMethod("GET"); floatx=3.4f; if(con.getResponseCode()==200){ InputStreaminputStr=con.getInputStream(); Stringinfo=newString(StreamTool.read(inputStr),"UTF-8"); Log.i(tag,Thread.currentThread().getName()+info); if(info.contains("200")) return"200"; } }catch(MalformedURLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } //TODOAuto-generatedmethodstub return"404"; } }
处理返回值
ExecutorServiceexec=Executors.newCachedThreadPool(); ArrayList<Future<String>>results=newArrayList<Future<String>>(); for(inti=0;i<num;i++) results.add(exec.submit(selectThread(telnumber))); for(Future<String>fs:results) try{ if(fs.get().equals("200")) success++; }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(ExecutionExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnsuccess;
以上就是本文的全部内容,希望对大家的学习有所帮助。