创建两个文件
第一个: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; 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+""); }