gpt4 book ai didi

java - tcp多线程服务器java

转载 作者:可可西里 更新时间:2023-11-01 02:49:23 25 4
gpt4 key购买 nike

我试图创建多线程服务器,它将接收来自不同客户端的消息,然后发回消息。我正在使用执行服务器来管理的创建线程。但是我不确定我做的是否正确,我以前没有使用过执行者服务吗?我对这条线有疑问executor.execute(new Handler(client)); 处理程序是抽象的,无法初始化?如何解决?执行服务会解决绑定(bind)端口的问题吗?它会使 smth 像客户的请求队列一样吗?提前谢谢

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);

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

关于java - tcp多线程服务器java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com