Я никогда не задумывался об использовании Thread.Sleep, пока не загрузил последнюю версию Netbeans. Netbeans теперь предупреждает вас не использовать Thread.Sleep. Итак, я провел небольшое исследование по этой теме и нашел людей, утверждающих, что вам нужно использовать Thread.Sleep только для целей отладки / тестирования и что если вы используете его в любое другое время, у вас плохо написанный код.
У меня вопрос, как я могу отказаться от использования Thread.Sleep в следующей ситуации.
Я написал серверное приложение, которое взаимодействует с другим приложением.Сервер имеет два потока:
Обрабатывает данные, поступающие через сокет, и отправляет обратно другую информацию или просто подтверждения.
Это основная ветка. После запуска потока сокета он переходит в неопределенный цикл while. В этом цикле while я проверяю, что поток сокета все еще активен и что пользователь не просил выйти из приложения через интерфейс TrayIcon. Затем я сплю и продолжаю этот цикл while.
В этом приложении TrayIcon является единственным пользовательским интерфейсом.
Вот фрагмент, на который я ссылаюсь:
// continues running as long as the exitth file is not present and
// the tray icon is not in a safe to exit status.
while(doNotExit())
{
if (getPrimaryThread() == null || !getPrimaryThread().isAlive())
resetsThreadAndSocket();
try
{
// check to see if the socket threads are still active, if not create new ones.
if ((getPrimaryThread() == null || !getPrimaryThread().isAlive()))
createSocketThread();
// check right before sleeping that the user does not want to exit.
if(getTrayIcon().isExiting())
break;
// puts the main Thread to sleep for 3 seconds
Thread.sleep(3000);
}
catch(SQLException ex)
{
_log.error(ex.getMessage(), ex);
restartDatabase();
}
}