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();
    }
}
原文地址:https://www.cnblogs.com/guoyansi19900907/p/10982962.html