Ich verwende newFixedThreadPool, um eingehende Anforderungen gleichzeitig an einen Server-Socket zu senden. Aus irgendeinem Grund werden die Arbeiterklassen, die die Clients bedienen, nicht in separaten Threads ausgeführt. Wenn ich mehrere Anfragen an den Socket sende, werden die Anfragen der Reihe nach und nicht gleichzeitig wie gewünscht geliefert. Ich führe OpenJDK 1.8.0_77, wenn das einen Unterschied macht.Executorservice-Worker werden nicht in separaten Threads ausgeführt.
Dies ist ein Auszug meiner Hauptklasse:
ExecutorService executorService = Executors.newFixedThreadPool(100);
ServerSocket serverSocket = new ServerSocket(5656);
while(true) {
Socket socket = serverSocket.accept();
executorService.execute(new ConnectionHandler(socket));
}
Diese meine Arbeiter-Klasse ist:
public class ConnectionHandler implements Runnable {
private Socket socket;
public ConnectionHandler(Socket socket) {
this.socket = socket;
}
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
BufferedReader reader = null;
PrintWriter writer = null;
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
while(true) {
String line = reader.readLine();
if(line == null) break;
writer.println("Echo: " + line);
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
if(reader != null) reader.close();
if(writer != null) writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
Woher wissen Sie, dass es nicht verschiedene Threads verwendet? Protokollieren Sie den Thread-Namen, um sicher zu sein. –
Sind Sie sicher, dass dies kein Problem Ihres Testclients ist? – mtraut