java 线程的 run() 没有返回值,怎么办?

44 篇文章 0 订阅

项目需求

用 线程 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;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值