java线程的run()没有返回值怎么办?
用线程Thread执行一些方法后,需要判断执行是否成功。
public void run() {}
run( ) 方法返回值是空, 怎么办?
解决方法:
- Note
- 使用 call() 方法
- Callable接口是 jdk 5 后新增的接口
代码:
package com.example.thread; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.Callable; import android.util.Log; import com.example.StreamTool.StreamTool; public class MyThread1 implements Callable<String> { private static final String tag = "xxxyyy"; private String phone; private String name; public MyThread1(String name, String phone) { this.name = name; this.phone = phone; } // public MyThread1(String name, String phone) { // super(name); // this.phone = phone; // } // public void run() { // Log.i(tag, Thread.currentThread().getName() + "......start"); // String newpath = "http://www.dianping.com/ajax/json/account/reg/mobile/send?m=" + phone + "&flow=t&callback=DP._JSONPRequest._5"; // StringBuilder strBui = new StringBuilder(newpath); // // try { // URL url = new URL(strBui.toString()); // HttpURLConnection con = (HttpURLConnection) url.openConnection(); // con.addRequestProperty("Content-Type", "text/html; charset=UTF-8"); // con.addRequestProperty( // "User-Agent", // "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/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){ // InputStream inputStr = con.getInputStream(); // String info = new String(StreamTool.read(inputStr), "UTF-8"); // Log.i(tag, Thread.currentThread().getName() + info); // } // } catch (MalformedURLException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // // // } @Override public String call() throws Exception { Log.i(tag, Thread.currentThread().getName() + "......start"); String newpath = "http://www.dianping.com/ajax/json/account/reg/mobile/send?m=" + phone + "&flow=t&callback=DP._JSONPRequest._5"; StringBuilder strBui = new StringBuilder(newpath); try { URL url = new URL(strBui.toString()); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.addRequestProperty("Content-Type", "text/html; charset=UTF-8"); con.addRequestProperty( "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/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"); float x = 3.4f; if (con.getResponseCode() == 200){ InputStream inputStr = con.getInputStream(); String info = new String(StreamTool.read(inputStr), "UTF-8"); Log.i(tag, Thread.currentThread().getName() + info); if(info.contains("200")) return "200"; } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // TODO Auto-generated method stub return "404"; } }
处理返回值
ExecutorService exec = Executors.newCachedThreadPool(); ArrayList<Future<String>> results = new ArrayList<Future<String>>(); for(int i = 0; i < num; i++) results.add(exec.submit(selectThread(telnumber))); for (Future<String> fs:results) try { if (fs.get().equals("200")) success++; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return success;
以上就是本文的全部内容,希望对大家的学习有所帮助。
- Java Thread中start()和run()的区别_动力节点Java学院整理
- java基本教程之Thread中start()和run()的区别 java多线程教程
- java thread start()和run()方法简析
- JAVA面试题 static关键字详解
- JAVA面试题 start()和run()详解
转载请注明出处:http://www.syyashida.com/article/20230330/138491.html
随机推荐
-
java线程池参数详解
下面分别解释每一种线程池特点和使用场景: 1.public static ExecutorService newFixedThreadPool() 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多...
-
Java 线程创建与常用方法
进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行,从磁盘加载这...
-
(转)Java结束线程的三种方法
背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好。 Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不...
-
Java编程的逻辑 (78) - 线程池
?本系列文章经补充和完善,已修订整理成书《Java编程的逻辑》,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http://item.jd.com/12299018.ht...
-
为什么Java 5+中的volatile不能确保另一个线程的可见性?
根据: http://www.ibm.com/developerworks/library/j-jtp03304/ 在新的内存模型下,当线程A写入易失性变量V,而线程B从V读取时,现在保...
-
java四种线程池简介,使用
为什么使用线程池 1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。 2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止消耗过多的内存 3.web项目应该创建统一的线程池,如静态或者交给容器处理,而...
-
java线程并发cyclicbarrier类使用示例
复制代码 代码如下:package com.yao; import java.util.Random;import java.util.concurrent.CyclicBarrier; /*** CyclicBarrier类似于Coun...
-
Java线程中的关键字和方法示例详解
目录一、volatile关键字1,volatile 能保证内存可见性2,编译器优化问题二、wait 和 notify1,wait()方法2,notify()方法3,notifyAll()方法一、volatile关键字 1,volatile...
-
浅谈Java线程间通信方式
目录1.volatile和synchronized关键字 2.等待/通知机制 3.管道输入/输出流 4.join()方法 5.ThreadLocal()方法 总结线程间通信方式有两种:共享内存和消息传递。 不同进程间线程通信等同于进程间...
-
Java 线程的生命周期完整实例分析
本文实例讲述了Java 线程的生命周期。分享给大家供大家参考,具体如下: 一 代码 /** * @Title: ThreadStatus.java * @Description: TODO(演示线程的生命状态) */ import j...