套接字监听器是KILLING我的CPU,如何提高我的代码的性能?

Fel*_*Med 3 java sockets port multithreading listener

我已经实现了一个Socket Listener来读取从GPS发送的数据,但它占据了我90%的CPU.我知道这是我的代码导致这一点,但我不知道在哪里.

这是我的主要课程:

public class PortToDB {

    ServerSocket serverSocket = null;

    public void listenSocket(){
        try{
            serverSocket = new ServerSocket(50000);
        } catch (IOException e) {
            System.out.println("Could not listen on port 50000. " + e);
            System.exit(-1);
        }

        while(true){
            GPSData gd;
            try{
                gd = new GPSData(serverSocket.accept());
                Thread t = new Thread(gd);
                t.start();
            } catch (IOException e) {
                System.out.println("Accept failed: 50000. " + e);
                System.exit(-1);
            }
        }
    }

    public static void main(String[] args) {    
        PortToDB portToDb = new PortToDB();
        portToDb.listenSocket();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Runnable类:

class GPSData implements Runnable {

    private Socket client;
    DBHandler dbhandler = new DBHandler();

    GPSData(Socket client) { this.client = client; }

    public void run(){
        String line;
        BufferedReader in = null;

    try{
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    } catch (IOException e) {
        System.out.println("in or out failed");
        System.exit(-1);
    }

    while(true){
      try{
          if((line = in.readLine()) != null){
              dbhandler.dbInsert(line);
          }
      } catch (IOException e) {
          System.out.println("Read failed");
          System.exit(-1);
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

use*_*421 6

如果readLine()返回null,则必须关闭套接字,退出读取循环,并忘记该客户端.你在EOS旋转.