zoukankan      html  css  js  c++  java
  • socket之线程来提高吞吐量

    线程demo:

    线程:

    package com.company.s5;
    
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.Socket;
    
    public class BeginThread extends Thread {
        private Socket socket;
    
        public BeginThread(Socket socket) {
            super();
            this.socket=socket;
        }
    
        @Override
        public void run() {
            try {
                InputStream inputStream=socket.getInputStream();
                InputStreamReader reader=new InputStreamReader(inputStream);
                char[] charArray=new char[1000];
                int readLength=-1;
                while ((readLength=reader.read(charArray))!=-1){
                    String newstring=new String(charArray,0,readLength);
                    System.out.println(newstring);
                }
                reader.close();
                inputStream.close();
                socket.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    服务端

    package com.company.s5;
    
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class BeginServer {
        public static void main(String[] args) throws Exception{
            ServerSocket serverSocket=new ServerSocket(8888);
            int runTag=1;
            while (runTag==1){
                Socket socket=serverSocket.accept();
                BeginThread beginThread=new BeginThread(socket);
                beginThread.start();
            }
            serverSocket.close();
        }
    }

    客户端:

    package com.company.s5;
    
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class BeginClient {
        public static void main(String[] args) throws Exception{
            Socket socket=new Socket("localhost",8888);
            OutputStream outputStream=socket.getOutputStream();
            outputStream.write("我是中国人".getBytes());
            outputStream.close();
            socket.close();
        }
    }

    线程池demo:

    线程类

    package com.company.s5;
    
    import java.io.InputStream;
    import java.net.Socket;
    
    public class ReadRunnable implements Runnable{
        private Socket socket;
    
        public ReadRunnable(Socket socket) {
            super();
            this.socket = socket;
        }
    
        @Override
        public void run() {
            try {
                InputStream inputStream=socket.getInputStream();
                byte[] byteArray=new byte[100];
                int readLength=inputStream.read(byteArray);
                while (readLength!=-1){
                    System.out.println(new String(byteArray,0,readLength));
                    readLength=inputStream.read(byteArray);
                }
                inputStream.close();
                socket.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    服务类

    package com.company.s5;
    
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.concurrent.Executor;
    import java.util.concurrent.Executors;
    
    public class Server2 {
        private ServerSocket serverSocket;
        private Executor pool;
    
        public Server2(int port, int poolSize) {
            try {
                this.serverSocket = new ServerSocket(port);
                this.pool = Executors.newFixedThreadPool(poolSize);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        public void startService(){
            try {
                for(;;){//无限循环
                    Socket socket=serverSocket.accept();
                    pool.execute(new ReadRunnable(socket));
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            Server2 server2=new Server2(8088,10000);
            server2.startService();
        }
    }

    客户端类

    package com.company.s5;
    
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class BeginClient {
        public static void main(String[] args) throws Exception{
            Socket socket=new Socket("localhost",8088);
            OutputStream outputStream=socket.getOutputStream();
            outputStream.write("我是中国人".getBytes());
            outputStream.close();
            socket.close();
        }
    }
  • 相关阅读:
    Xn数列(codevs 1281)
    素数密度(洛谷 1835)
    Sightseeing(poj 3463)
    线段树——Ultra-QuickSort
    最大子矩阵
    完成作业的先后顺序
    堆积木块的最大高度
    最长上升序列和
    最长上升子序列
    高精度乘法程序
  • 原文地址:https://www.cnblogs.com/guoyansi19900907/p/10982962.html
Copyright © 2011-2022 走看看