Световой кодер
и Эрнест Фридман-Хилл, похоже, дают хороший совет, но я хотел бы добавить одну вещь: вы рассматривали возможность использования шаблона Observer и реализации по умолчанию java Observable ?
Сервер может расширять объект Observable, а ServerThread может реализовывать интерфейс Observer.При создании новых ServerThreads зарегистрируйте их в Observable, используя
server.addObserver(serverThread);
. ServerThread необходимо будет знать о сервере, с которым он связан.Затем всякий раз, когда клиент отправляет новое сообщение вместо out.println (userInput), выполните следующее:
synchronized (server) {
server.setChanged();
server.notifyObservers(userInput);
}
Вам также необходимо реализовать ServerThread.update (Observable o, Object update), в котором выполучит выходной поток сокета serverThread и запишет в него ((String) update).
Обратите внимание, что при этом будет использоваться один поток для отправки сообщений всем наблюдателям, и другие потоки будут блокировать обработку своих чатов, пока он не получитотправлено всем наблюдателям.