Это похоже на проблему типа производитель-потребитель, и я бы структурировал ее совершенно иначе, поскольку fromClient.readLine();
блокирует и, следовательно, должен выполняться в другом потоке.
Так что рассмотрите возможность чтения ввода пользователя в другомвставьте в структуру данных Queue<String>
, например LinkedBlockingQueue<String>
, и затем извлекайте элементы String из очереди в коде выше каждые 5 секунд, или ничего, если в очереди нет элементов.
Что-то вроде ....
new Thread(() -> {
while (true) {
try {
blockingQueue.put(input.readLine());
} catch (InterruptedException | IOException e) {
e.printStackTrace();
}
}
}).start();
new Thread(() -> {
try {
while (true) {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
String input = blockingQueue.poll();
input = input == null ? "" : input;
toClient.println(input);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
Примечания: не вызывайте .stop()
в потоке, так как это опасно.Также избегайте расширения темы.