У меня есть поток, содержащий петлю

while(isRunning){
}

isRunning - это логическая переменная со значением true, когда некоторые щелкают по кнопке, она получает false и, таким образом, покидает цикл и функцию run() потока.

Я хочу создать еще одну кнопку, при нажатии на которую она будет повторно входить в функцию run().

Я не уверен, когда я выхожу из функции run(), поток умирает или просто останавливается. Я пробовал использовать thread.run(), но это не помогло.

Также я искал ответы на вопросы других людей по этому поводу, но, похоже, мне ничего не помогло. Спасибо за помощь

0
Cooper 22 Мар 2014 в 21:30
1
Добавьте языковой тег.
 – 
Yu Hao
22 Мар 2014 в 21:31

3 ответа

Лучший ответ

Если ваш поток доходит до конца, он останавливается. Он останется там, чтобы вы могли собирать его статус возврата, пока поток не будет очищен.

Для перезапуска в том же потоке вам понадобится дополнительный поток управления. Например:

while (restarted) {
    while (isRunning) {
    }
    // Wait for a restart or end click
}

Это то, что делают так называемые рабочие потоки в пуле потоков , которые предназначены для максимальной производительности.

Но логически вы, вероятно, просто захотите создать новый объект потока и запустить его.

new Thread(p).start();
0
Klaas van Aarsen 22 Мар 2014 в 22:07

Когда поток завершает обработку своего кода, его невозможно перезапустить. Вы также можете:

  1. Создайте новый поток и передайте ему Runnable.

  2. Если вам нужно часто использовать этот метод 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);
           }
      }
    
1
Dioxin 22 Мар 2014 в 22:07