Я работаю над решением сервер / клиент, которое создает новый серверный поток для каждого подключенного клиента (добавляет его в пул потоков).Серверный поток ожидает сообщения от связанного клиента, вызывая readLine()
в потоке ввода сокетов клиентов.Если я установлю пул потоков на 1 и подключу второй клиент, он не будет выполняться пулом потоков, пока первый поток не будет закрыт.У меня сложилось впечатление, что пул потоков будет автоматически простаивать поток, если он просто ожидает readLine (), но я думаю, что это не так.Как мне создать такую программу?
Это серверный цикл, который создает новые серверные потоки, подключенные к клиенту:
private final static Executor executor = Executors.newFixedThreadPool(MAX_CLIENTS);
while (true) {
clientSocket = serverSocket.accept();
executor.execute(new ChatServer(clientSocket, allClients));
}
И метод запуска работает так:
socketReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())
while(true) {
inputLine = socketReader.readLine();
//then send input line to all clients
}
Как уже говорилось, если FixedThreadPool уже запущен MAX_CLIENTS
, новые клиенты не будут выполняться.