一、服務端回傳服務類:
導入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 中文參考手冊》,也希望大家多多支持武林網。 ,也希望大家多多支持武林網。