一、服务端回传服务类:
导入java.io.ioexception;导入java.io.inputstream;导入java.io.outputstream;导入java.net.socket;导入java.util.logging.Level;导入java.util.logging.logger;公共类Echoprotocol实现Runnable {private static final int int bufsize = 32; // I/O Buffer Private Socket Clientocket的size(in Bytes); //套接字连接到客户端私人记录器记录器; //服务器Logger公共Echoprotocol(Socket Clienterocket,Logger Logger){this.clientsocket = clientsocket; this.logger = logger; } public static void handleAchoclient(socket clientocket,logger logger){尝试{//从socket inputStream in = clutterocket.getInputStream()获取输入和输出I/O流; outputStream out = clienterocket.getOutputStream(); int recvmsgsize; //接收消息的大小int totalbytesechoed = 0; //从client byte [] echobuffer = new byte [bufSize]收到的字节; //接收缓冲区//接收到客户端关闭连接,由-1表示为-1 while(((recvmsgsize = in.Read(echobuffer))!= -1){out.write(echobuffer,0,recvmsgsize);总bytesechoed += recvmsgsize; } logger.info(“ client” + clientsocket.getRemotesocketDress() +“,回声” + totalbytesechoed +“ bytes。”); } catch(ioexception ex){logger.log(level.warning,“回声协议中的异常”,ex); }最后{尝试{clibterocket.close(); } catch(ioexception e){}}}} public void run(){handleachoclient(this.clientsocket,this.logger); }}}tcp::
导入java.io.ioexception;导入java.net.serversocket;导入java.net.socket;导入java.util.logging.logger;公共类TCPechoServerThread {public static void main(string [] args)抛出ioException {//创建服务器套接字以接受客户端连接请求serversocket servsock = new serversock = new serversocket(5500); logger logger = logger.getLogger(“实用”); //永远运行,接受每个连接的线程,而(true){socket clntsock = servsock.accept(); //等待连接的块//生成线程处理新连接线程螺纹=新线程(新的Echoprotocol(clntsock,logger)); thread.start(); logger.info(“创建并启动线程” + thread.getName()); } / *未达到 * /}} tcp::
导入java.io.ioexception;导入java.net.serversocket;导入java.net.socket;导入java.util.logging.Level;导入java.util.logging.logger;公共类TCPechoserverpool {public static void main(string [] args)抛出ioexception {int threadPoolSize = 3; //修复了ThreadPoolSize Final serversocket Servsock = new ServerSocket(5500);最终Logger Logger = Logger.getLogger(“实用”); //将固定数量的线程带到服务客户端的(int i = 0; i <threadPoolSize; i ++){thread thread = new thread(){public void run(){while(true){try {socket clntsock = servsock.accept.accept.accept(); //等待连接echoprotocol.handleechoclient(clntsock,logger); //处理} catch(ioexception ex){logger.log(level.warning,“客户端接受失败”,ex); }}}}}; thread.start(); logger.info(“创建并启动thread =” + thread.getName()); }}}}四、使用线程池(使用春季的线程次会有队列、最大线程数、最小线程数和超时时间的概念)
1.线程池工具类:
导入java.util.concurrent。*; /** * * * * * * @author watson Xu * @since 1.0.0 <p>2013-6-6-8上午10:33:09</p> */public Class class thread threadpoolpooltaskexecutor {private threadpeartpooltaskexecutor(}执行器会在需要自行任务而线程池中没有线程的时候来调用该程序。对于callable */公共线程(runnable r){count ++;公共静态void Indoke(可运行任务,时间持续设备,长时间)抛出TimeOutException,RunTimeException {Invoke(task,null,nime,timeout); } public static <t> t Invoke(可运行的任务,t结果,timeunit单元,长时间)抛出timeOutException,runtimeException {future <t> future = executor = executor.submit(任务,结果); t t = null;尝试{t = future.get(超时,单位); } catch(timeOutException e){抛出新的timeoutexception(“ thread indoke timeout ...”); } catch(异常e){投掷新的RuntimeException(e); }返回t; } public static <t> t Invoke(可召唤<t>任务,timeunit单元,长时间)抛出timeOutException,runtimeException {//这里将任务提交给执行器,任务已经启动,任务已经启动,这里是异步的。未来<t> future <tfuture = executor.submit(task); // system.out.println(“线程中的任务aready”); t t = null;尝试{ / * *这里的操作是确认任务是否已经完成,有了这个操作以后 * 1)对Invoke()的调用线程变成了等待任务完成状态 * 2)主线程可以接收子线程的处理结果 * / t = future.get(timeout,unit); } catch(timeOutException e){抛出新的timeoutexception(“ thread indoke timeout ...”); } catch(异常e){投掷新的RuntimeException(e); }返回t; }}}2. TCP服务端::
导入java.io.ioexception;导入java.net.serversocket;导入java.net.socket;导入java.util.concurrent.timeunit;导入java.util.logging.logger;导入demo.callable.threadpooltaskexecutor;公共类TCPECHOSERVEREXECUTOR {public static void main(string [] args)抛出ioException {//创建服务器套接字以接受客户端连接请求serversocket servsock = new serversock = new serversocket(5500); logger logger = logger.getLogger(“实用”); //永远运行,接受并产卵线程以服务每个连接,而(true){socket clntsock = servsock.accept(); //等待连接//executorservice.submit(new echoprotocol(clntsock,logger)));尝试{threadpooltaskexecutor.invoke(新的echoprotocol(clntsock,logger),timeunit.seconds,3); } catch(异常e){} //service.execute(new timelimitechoprotocol(clntsock,logger)); } / *未达到 * /}}以上就是本文的全部内容,java的语法,大家可以关注:《在Java jdk 1.7 参考手册官方英文版》、《 jdk 1.6 api java jdk jdk jdk jdk jdk 1.5 api java 中文参考手册》,也希望大家多多支持武林网。,也希望大家多多支持武林网。