У меня есть поток, содержащий петлю
while(isRunning){
}
isRunning
- это логическая переменная со значением true
, когда некоторые щелкают по кнопке, она получает false
и, таким образом, покидает цикл и функцию run()
потока.
Я хочу создать еще одну кнопку, при нажатии на которую она будет повторно входить в функцию run()
.
Я не уверен, когда я выхожу из функции run()
, поток умирает или просто останавливается. Я пробовал использовать thread.run()
, но это не помогло.
Также я искал ответы на вопросы других людей по этому поводу, но, похоже, мне ничего не помогло. Спасибо за помощь
3 ответа
Если ваш поток доходит до конца, он останавливается. Он останется там, чтобы вы могли собирать его статус возврата, пока поток не будет очищен.
Для перезапуска в том же потоке вам понадобится дополнительный поток управления. Например:
while (restarted) {
while (isRunning) {
}
// Wait for a restart or end click
}
Это то, что делают так называемые рабочие потоки в пуле потоков , которые предназначены для максимальной производительности.
Но логически вы, вероятно, просто захотите создать новый объект потока и запустить его.
new Thread(p).start();
Когда поток завершает обработку своего кода, его невозможно перезапустить. Вы также можете:
Создайте новый поток и передайте ему
Runnable
.Если вам нужно часто использовать этот метод
run()
, используйтеExecutor
. Вы можете использоватьExecutors.newSingleThreadExecutor()
, который предоставит вам рабочий поток. (Многоразовая нить).class Example { static ExecutorService executor = Executors.newSingleThreadExecutor(); static Runnable run = new Runnable() { public void run() { } }; public static void main(String[] args) { //anytime you wanna run that code.. executor.execute(run); } }
Пожалуйста, прочтите руководство по параллелизму в Java. http://docs.oracle.com/javase/tutorial/essential/concurrency/ а>
Просто возможно, охраняемые блоки могут быть полезны для вашего случая, но ваш случай немного расплывчат, чтобы рекомендовать что-то конкретное. http://docs.oracle.com/javase/tutorial/essential/concurrency /guardmeth.html
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.