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();
        }
    }
  • 相关阅读:
    php 单双引号的区别
    SpringBoot动态代理使用Cglib还是jdk的问题
    SpringBoot MyBatis 一级缓存和二级的配置理解
    SpringBoot+MyBatis,显示SQL方式
    java lambda分页
    关于Spring的@Value注解使用Integer方式
    mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决
    关于Integer包装类对象之间值的比较
    你未必了解的DNS
    SpringCloudConfig报错Cannot clone or checkout repository:https://gitee.com/yanfa401/config-repo
  • 原文地址:https://www.cnblogs.com/guoyansi19900907/p/10982962.html
Copyright © 2011-2022 走看看