Как избежать использования Thread.Sleep

Я никогда не задумывался об использовании Thread.Sleep, пока не загрузил последнюю версию Netbeans. Netbeans теперь предупреждает вас не использовать Thread.Sleep. Итак, я провел небольшое исследование по этой теме и нашел людей, утверждающих, что вам нужно использовать Thread.Sleep только для целей отладки / тестирования и что если вы используете его в любое другое время, у вас плохо написанный код.

У меня вопрос, как я могу отказаться от использования Thread.Sleep в следующей ситуации.

Я написал серверное приложение, которое взаимодействует с другим приложением.Сервер имеет два потока:

  1. Обрабатывает данные, поступающие через сокет, и отправляет обратно другую информацию или просто подтверждения.

  2. Это основная ветка. После запуска потока сокета он переходит в неопределенный цикл 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();
    }
}
9
задан Erwin Bolwidt 8 March 2015 в 05:45
поделиться