首页 > 编程知识 正文

java处理并发的方法,java多线程编程实例

时间:2023-05-05 20:55:27 阅读:38372 作者:473

import java.util.ArrayList;

import java.util.List;

import Java.util.concurrent.callable;

import Java.util.concurrent.execution exception;

import Java.util.concurrent.executorservice;

import Java.util.concurrent.executors;

import Java.util.concurrent.future;

import org.apache.log4j.Logger;

publicclassconcurrentrulesyncutil {

privatestaticfinalintmax _ thread=10; //要启动的最大线程数

私有数据中心服务中心=executors.newfixedthreadpool (max _ thread );

privatestaticfinalloggerlogger=logger.getlogger (concurrentrulesyncutil.class;

//*

publicstaticlistactiveapplist (list strurl,jzdzxc ) {

if (strurl==null|| strurl.size (==0) {

返回空值;

}

listrunthreads=general threadinfo (strurl,queryString );

列表reslist=new ArrayList (;

try {

list fetures=exec.invoke all (runthreads );

for(futurefeture:fetures ) {

列表tmp=null;

try {

tmp=feture.get (;

} catch (执行元素) {

logger.error (concurrentrulesyncutilthreadactiveapplistgeterror 3360 ) e.getmessage ),e );

}

if(tmp!=空) {

reslist.addall(tmp;

}

}

} catch (互联互通) )

logger.error (concurrentrulesyncutilactiveapplistgeterror 3360 (e.getmessage ),e );

}

返回列表;

}

publicstaticlistgeneralthreadinfo (列表串,jzdzxc )。

列表runthreads=new ArrayList (;

intsize=strurl.size (/max _ thread 1;

int i=0;

int len=strUrl.size (;

for (; i size=len; i =size ) {

runthreads.add (newxxddy (strurl.sublist (I,i size ),queryString );

}

if(Ilen ) {

runthreads.add (newxxddy (strurl.sublist (I,len ),queryString );

}

返回运行期间;

}

staticclassxxddyimplementscallable {

私有列表主机列表URL; //分配给当前线程的主机列表

私密性jzdzxc; //参数列

publicxxddy (列表流,jzdzxc ) {

this.hostlistUrl=strUrl;

this.query string (查询字符串);

}

@Override

公共列表调用() throws Exception { )。

returngetresponsetext (hostlisturlquerystring;

}

}

//*

publicstaticstringgetresponsetext (stringqueryurl ) {

returngetresponsetext (查询URL、null、null );

}

//*

publicstaticstringgetresponsetext (stringqueryurl,飞鸵鸟,String ip ) )。

try {

URL URL=newurl (查询URL;

if(IP!=空) {

stringstrsdyx=IP.split('. ';

bytesdyx b=new byte[str.length];

for(intI=0,len=str.length; I

b[I]=(byte ) ) integer.parseint ) str[I],10 );

}

proxy proxy=new proxy (proxy.type.http,

newinetsocketaddress (inet地址. getbyaddress (b ),80 );

HTPurlconn=(httpurlconnection ) url

.开放连接(代理);

}else{

HTPurlconn=(httpurlconnection ) url

. openConnection (;

}

HTP urlconn.setrequestmethod (' get );

HTPurlconn.setdooutput(true;

HTP urlconn.setconnecttimeout (default _ time out;

http urlconn.setreadtimeout (default _ time out;

HTP urlconn.setdefaultusecaches (false );

HTPurlconn.setusecaches(false );

is=httpUrlConn.getInputStream (;

intresponsecode=http urlconn.getresponse code (;

//如果返回的结果在400以上的话,就有问题了

响应代码400 (if ) {

logger.error (' getresponsetextforqueryurl : ' query URL ' gotresponsecode 3360 ' response code );

返回' getresponsetextforqueryurl 3360 ' query URL ' gotresponsecode : '响应代码;

}

需要自动识别//页的编码通过从context-type分析获得,默认为UTF-8

字符串编码=' utf-8 ';

stringcontexttype=http urlconn.get content type (;

if (stringutilsext.is not blank (上下文类型) ) }

intpos=context type.lastindexof ('=';

if(pos-1 ) {

编码=context type.substring (pos1);

}

}

//system.out.println(encoding );

br=newbufferedreader (newinputstreamreader ) is,编码);

字符串数据=null;

while((data=br.readline ) )!=空) {

RES.append (数据(n );

}

return res.toString (;

}catch(ioexceptione ) {

Logger.error(e.getmessage ),e );

return ' failed : ' e.getmessage (;

}catch(exceptione ) {

Logger.error(e.getmessage ),e );

return ' failed : ' e.getmessage (;

} finally {

if(br!=空) {

try {

br.close (;

}catch(ioexceptione ) {

Logger.error(e.getmessage ),e );

RES.append(e.getmessage ) );

}

}

}

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。