Подтвердить что ты не робот

Сделать спящий режим Java без потоковой передачи

У меня есть java-программа, которая выполняет некоторые вычисления, а затем загружает результаты в базу данных MYSQL (размещается на другом компьютере в той же сети). Иногда я сталкиваюсь с проблемой, что программа выполняет вычисления быстрее, чем загружает результат. Поэтому он не может загрузить все результаты. Программа в настоящее время не имеет резьбы.

Есть ли способ сделать программу спящей на несколько миллисекунд после того, как она выполнит вычисления, чтобы загрузка выполнялась должным образом. (Как в других языках функция ожидания или ожидания)

Я могу прокрутить программу, но это будет слишком много переписывать. Есть ли более простой способ?

Спасибо

4b9b3361

Ответ 1

Есть ли способ сделать программу спящей на несколько миллисекунд после того, как она выполнит вычисления, чтобы загрузка выполнялась должным образом. (Как в других языках функция ожидания или ожидания)

Thread.sleep(milliseconds) - общедоступный статический метод, который будет работать и с однопоточными программами. Что-то вроде следующего является типичным шаблоном:

try {
    // to sleep 10 seconds
    Thread.sleep(10000);
} catch (InterruptedException e) {
    // recommended because catching InterruptedException clears interrupt flag
    Thread.currentThread().interrupt();
    // you probably want to quit if the thread is interrupted
    return;
}

Нет необходимости реализовывать Runnable или делать что-либо еще с потоковыми вызовами. Вы можете просто позвонить ему в любое время, чтобы поставить паузу в некоторый код.

Ответ 2

Вам не нужно повторять нить или такую ​​вещь. Все, что вам нужно сделать, это позвонить:

Thread.Sleep(5000); // pause the app for 5 seconds

Каждое приложение также является потоком, в вашем случае также называется однопотоковым. Вы можете использовать API-интерфейс для потоковой передачи, например Sleep без какого-либо другого кода или рефакторинга.

Большая осторожность: Если вам нужно использовать Thread.Sleep для управления потоком управления, возможно, что-то происходит неправильно в архитектуре. От вашего OP я заинтересован, чем в том, что вы описываете как однопоточное приложение, похоже, у вас есть одна операция "опережая" другую. Это не должно быть возможным, если вы не получаете асинхронные события из других источников.

Еще одно предостережение: Sleep принимает миллисекундный параметр, который обычно произволен и просто означает "немного подождать". Проблема в том, что "немного времени" может быть в порядке, но завтра ваша машина будет находиться под большей нагрузкой, а "немного" больше не будет достаточно хороша, ваш Сон исчезнет и появится такая же ошибка. Конечно, вы можете установить тайм-аут на "долгое время", но тогда вы будете ждать "долгое время" для каждой транзакции... Catch 22.

Ответ 3

Используйте Thread.sleep():

try
{
    Thread.sleep(1000); // Sleep for one second
}
catch (InterruptedException e)
{
    Thread.currentThread().interrupt();
}

Это не вводит новую программу Thread в программу или не требует каких-либо других Thread связанных механизмов.

Ответ 4

Просто используйте: -

try
{
Thread.sleep(<time in ms>);
}
catch(InterruptedException ex}
{
}

Это заставит текущий поток (например, основной поток) спать.

Ответ 5

Статический метод sleep() в классе java.lang.Thread приостанавливает текущий поток - который может быть только основным потоком - при вызове. Вам не нужно ничего делать, чтобы использовать его.

Ответ 6

Каждое приложение Java выполняется в потоке в JVM. Вызов статического метода Thread.sleep заставит поток приложений (тот, который работает) остановить

Ответ 7

Ваша программа не является Multi -threaded... но она использует поток. Thread.Sleep будет работать.

Ответ 8

Вы можете использовать Thread.sleep(); после вычисления без необходимости переписывать всю программу с помощью потоков!