Сделать спящий режим Java без потоковой передачи
У меня есть java-программа, которая выполняет некоторые вычисления, а затем загружает результаты в базу данных MYSQL (размещается на другом компьютере в той же сети). Иногда я сталкиваюсь с проблемой, что программа выполняет вычисления быстрее, чем загружает результат. Поэтому он не может загрузить все результаты. Программа в настоящее время не имеет резьбы.
Есть ли способ сделать программу спящей на несколько миллисекунд после того, как она выполнит вычисления, чтобы загрузка выполнялась должным образом. (Как в других языках функция ожидания или ожидания)
Я могу прокрутить программу, но это будет слишком много переписывать. Есть ли более простой способ?
Спасибо
Ответы
Ответ 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();
после вычисления без необходимости переписывать всю программу с помощью потоков!