java实现多线程echo
时间: 2024-04-25 20:19:59 浏览: 7
在Java中实现多线程的echo可以通过使用线程池和Socket编程来实现。下面是一个简单的示例代码:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class EchoServer {
private ServerSocket serverSocket;
private ExecutorService executorService;
public EchoServer(int port, int poolSize) throws IOException {
serverSocket = new ServerSocket(port);
executorService = Executors.newFixedThreadPool(poolSize);
System.out.println("Echo Server started on port " + port);
}
public void start() {
try {
while (true) {
Socket clientSocket = serverSocket.accept();
executorService.execute(new ClientHandler(clientSocket));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void stop() throws IOException {
serverSocket.close();
executorService.shutdown();
}
private static class ClientHandler implements Runnable {
private Socket clientSocket;
public ClientHandler(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
try (
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))
) {
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println("Server: " + inputLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
EchoServer echoServer = new EchoServer(8080, 10);
echoServer.start();
}
}
```
上述代码中,我们创建了一个EchoServer类,其中包含了一个内部类ClientHandler来处理客户端的请求。EchoServer类使用线程池来管理多个线程,每当有新的客户端连接时,就会创建一个新的ClientHandler线程来处理该客户端的请求。
在ClientHandler的run方法中,我们使用PrintWriter和BufferedReader来进行输入输出操作。当客户端发送消息时,服务器会将消息加上前缀"Server: "后返回给客户端。
相关问题:
1. 什么是线程池?
2. 如何在Java中创建Socket连接?
3. 什么是输入输出流?
4. 为什么要使用线程池来管理多线程任务?