您的位置:首页 > 其它

多线程并发请求检测url是否可用,有一个可用停掉所有的线程实现Callable接受线程返回值

2017-12-13 15:49 1136 查看
创建两个文件

第一个:TestCallable.java

package com.iba.cxx.web.controller.App;

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.Callable;

/**
* Created by wangzhi on 2017/12/13.
*/
public class TestCallable implements Callable {
private String oid;

TestCallable(String oid) {
this.oid = oid;
}

@Override
public Object call() throws MalformedURLException {
System.out.println("处理之前"+oid);
//进行网络请求
URL realUrl = new URL(oid);
// 打开和URL之间的连接
try {
HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection();
int responseCode = connection.getResponseCode();
if(responseCode==200){
System.out.println("正常请求"+oid);
responseCode = 0;
<
4000
span style="color:#000080;">return "1";
}else {
System.out.println("请求错误"+oid);
return "2";
}
} catch (Exception e) {
System.out.println("异常"+oid);
return "2";
}
}
}


第二个:testMain.java

private static Boolean hasValue = false;
public static void main(String[] args) throws ExecutionException, InterruptedException {
long lss = System.currentTimeMillis();
System.out.println(System.currentTimeMillis()+"");
int count = 0;
//创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(4);
//创建两个有返回值的任务
Callable c1 = new TestCallable("http://www.souppu.com");
Callable c2 = new TestCallable("http://www.soauhu.com");
Callable c3 = new TestCallable("http://www.sqouhu.com");
Callable c4 = new TestCallable("http://www.baidu.com");
//执行任务并获取Future对象
Future f1 = pool.submit(c1);
Future f2 = pool.submit(c2);
Future f3 = pool.submit(c3);
Future f4 = pool.submit(c4);
//从Future对象上获取任务的返回值,并输出到控制台
System.out.println(">>>"+f1.get().toString());
System.out.println(">>>"+f2.get().toString());
if (f1.get().toString() == "1"||f2.get().toString() == "1"||f3.get().toString()=="1"||f4.get().toString()=="1"){
count++;
hasValue = true;
System.out.println(hasValue+" "+count);
//关闭线程池
pool.shutdown();
}
System.out.println("返回值"+hasValue);
System.out.println(System.currentTimeMillis()-lss+"");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐