Java Socket消耗100%的CPU

时间:2019-07-31 19:34:15

标签: java sockets

我有一个插槽正在消耗计算机CPU的100%。 每隔30秒有150个客户端不同步地向服务器发送消息。 有谁知道如何解决这个问题? 下面是我的ServerSocket类

public class Servidor { 

  static ExecutorService es;    

  public static void main(String[] args) throws Exception {

    es = Executors.newFixedThreadPool(150);
    ServerSocket servidor = new ServerSocket(2010);

    while (true) {
      Socket soquete = null;

      try {
        System.out.println("Aguardando cliente: ");
        soquete = servidor.accept();
        System.out.println("Cliente Conectado: ");
        es.execute(new Conexao(soquete));

      } catch (Exception e) {
        e.printStackTrace();
      } 

    }

  }

}

Conexao类(实用程序类)采用客户端发送的字符串并将其保存在数据库中。 在我的Conexao班上

public class Conexao implements Runnable{

    Socket soquete;
    int contador = 0;

    public Conexao(Socket soquete) {
        super();
        this.soquete = soquete;
    }

    @Override
    public void run(){

        BufferedReader in = null;

        try{            
            in = new BufferedReader(new InputStreamReader(soquete.getInputStream()));                   

            while (!in.ready()) {/*System.out.println("!in.ready()");*/}

            String str =in.readLine();

            System.out.println("Rodando Thread"+Thread.currentThread().getName() + " : texto: " + str);                     

        }finally{               
            ...

            if(soquete != null){
                try {
                    soquete.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                }
            }           
        }       
}


} 

1 个答案:

答案 0 :(得分:1)

我通过删除“ while(!in.ready()){/System.out.println("!in.ready()");/}”部分并创建try块末尾的“ Thread.sleep”