for(Domain domain : list){html
//往任务队列里添加任务多线程
taskList.add(new WorkTask(domain));List<Future<CheckDetail>> futureList = new ArrayList<Future<CheckDetail>>();app
//jdk自带线程池,分配10个线程dom
ExecutorService service = Executors.newFixedThreadPool(10);try {socket
//线程池中多线程执行tasklist任务队列,执行时间为5分钟,5分钟执行不完就中断执行ui
futureList = service.invokeAll(taskList,5,TimeUnit.MINUTES);Socket socket = new Socket();this
//socekt链接ip,port,5秒钟后没有链接指定ip则跑出SocketTimeOutException异常,表示链接超时线程
socket.connect(new InetSocketAddress(InetAddress.getByName(domain.getIp()), domain.getPort()),5); socket.setSoTimeout(5); br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"GBK")); bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write(accept.toString()); bw.flush(); String firstLine = br.readLine(); if(firstLine != null){ stateCode = Integer.parseInt(firstLine.split(" ")[1]); header.append(firstLine); } state = (stateCode == 200)? 1 : 2; String line = ""; while(!"".equals((line = br.readLine()))){ header.append(line+"\n"); } } catch (Exception e) { if(e instanceof SocketTimeoutException){ state = 3; logger.info("检查域名:"+domain.getDomainname()+":"+domain.getPort()+" 链接超时."); }else{ state = 2; logger.info("检查域名:"+domain.getDomainname()+":"+domain.getPort()+" 失败."); } }finally{ try { if(bw != null) bw.close(); if(br != null) br.close(); } catch (IOException e) { logger.error("关闭输入输出流失败.",e); } } CheckDetail cDetail = new CheckDetail(); cDetail.setCheckDate(new Date()); cDetail.setCheckStatus(state); cDetail.setStatusCode(stateCode); cDetail.setHeader(header.toString()); cDetail.setDomain(domain.getDomainname()); cDetail.setIp(domain.getIp()); cDetail.setPort(domain.getPort()); return cDetail; } } }