tcp多线程服务器java

tcp多线程服务器java,java,tcp,Java,Tcp,我正在尝试创建多线程服务器,它将接收来自不同客户机的消息,然后发送回消息。我正在使用execute server来管理 线程。但我不确定我是否这样做了,莱特,我以前没有使用过executor服务?我对这条线有意见 executor.execute(新处理程序(客户端))处理程序是抽象的,无法初始化?如何修复它?执行服务会解决绑定端口的问题吗?它会使客户端的请求队列像smth一样吗?提前thx package serverx; import java.io.IOException; import

我正在尝试创建多线程服务器,它将接收来自不同客户机的消息,然后发送回消息。我正在使用execute server来管理 线程。但我不确定我是否这样做了,莱特,我以前没有使用过executor服务?我对这条线有意见
executor.execute(新处理程序(客户端))处理程序是抽象的,无法初始化?如何修复它?执行服务会解决绑定端口的问题吗?它会使客户端的请求队列像smth一样吗?提前thx

package serverx;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Handler;


public class ServerX {

  public static void main(String [] args){

    ExecutorService executor = Executors.newFixedThreadPool(30);

    ServerSocket server;
    try{

        server= new ServerSocket(5555);
        System.out.println ("Server started!");

        while(true) {
            try{
                Socket client = server.accept();

                //Thread t= new Thread (new Handler(client));
                //t.start();
                executor.execute(new Handler(client));    
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }

    }catch (IOException el){
        el.printStackTrace();
    }

  }
}
处理程序:

public class Handler implements Runnable{

        private Socket client;

        public Handler(Socket client){
            this.client=client;}
        public void run(){
         //............   

    }

}

处理程序不能是抽象的。将处理程序类设置为内部,并在while循环外部定义客户端套接字

Socket client;
while(true) {
try{
client = server.accept();
executor.execute(new Handler(client));
}
我想补充更多关于你的问题

ExecutorService非常擅长控制线程数。如果不需要“30”,也可以这样定义线程数:

 int poolSize = 50 * Runtime.getRuntime().availableProcessors();
 ExecutorService tasks = Executors.newFixedThreadPool(poolSize);

在多线程服务器中,每次客户端连接时,服务器都会创建一个新线程,该线程用于该客户端的作业。这就是为什么要将该线程定义为内部类并实现可运行接口的原因

很多时候,我把它作为内部类(所以我删除了public-here类处理程序实现Runnable),现在它可以工作了。所以服务器只有在30个线程之后才会停止工作,但我可以让它停止工作吗?例如,在一段时间之后,如果它很长一段时间都没有收到任何线程的话?如果可能的话?或者我只能改变这个值“30”@chajka不客气,你也可以接受我的回答表示感谢。至于你的另一个问题,实际上我以前没做过。当你启动你的服务器,它不会停止,直到你打破它。可能您可以为您的需求考虑一个中断条件(在while循环中)。