多线程并发请求检测url是否可用,有一个可用停掉所有的线程实现Callable接受线程返回值
2017-12-13 15:49
1136 查看
创建两个文件
第一个:TestCallable.java
第二个:testMain.java
第一个: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+""); }
相关文章推荐
- Java多线程实用篇之实现Callable接口,处理带有返回值的线程!
- Java多线程 - Callable 和 Future实现有返回值的线程
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- 用一个WEB服务或普通站点 实现这样一个效果?以URL请求,返回一个XML文档
- JQ检测(判断)一个链接(URL)是否有效(服务可用)
- [JavaScript]检测(判断)一个链接(URL)是否有效(服务可用)?[整理]
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
- 如何让 Spring MVC Controller 的同一个 URL 请求,根据逻辑判断返回 JSON 或者 HTML 视图?
- php中用于检测一个地理IP地址是否可用的代码
- 通过curl库的curl_multi方法实现并发请求多个URL
- 查找返回一个接口的所有实现类
- 判断一个URL是否可用
- 为什么要检测数据库连接是否可用,项目经理说如果实现了这个功能,客户会认可你的软件很专业,很好用
- 检测一个URL是否有效
- js检测判断链接(URL)是否有效(服务可用)
- 请求一个url 获得返回结果(doPost doGet方式)
- 所有Url的正则表达式,用来验证返回的Url是否符合RFC1738规定
- JavaScript判断一个URL链接是否有效的实现方法
- java多线程实现主线程等待所有子线程执行完毕