Как вы зацикливаете нить? - PullRequest
4 голосов
/ 22 марта 2012

У меня есть поток, содержащий исполняемый файл. Мне нужно, чтобы это зациклилось бесконечно, если пользователь не отменит его. Я понятия не имею, как это сделать. Вся помощь очень ценится. Приветствия.

1 Ответ

9 голосов
/ 22 марта 2012

Мне нужно, чтобы этот цикл был бесконечным, если пользователь не отменяет его.

Очевидно, что вы можете легко добавить цикл внутри вашего run() метода:

  new Thread(new Runnable() {
      public void run() {
          while (true) {
             // do something in the loop
          }
      }
  }).start();

Всегда полезно проверять прерывание потока:

  new Thread(new Runnable() {
      public void run() {
          // loop until the thread is interrupted
          while (!Thread.currentThread().isInterrupted()) {
             // do something in the loop
          }
      }
  }).start();

Если вы спрашиваете, как можно отменить операцию потока из другого потока (например, потока пользовательского интерфейса), тогда вы можете сделать что-то вроде этого:

private final volatile running = true;
...
new Thread(new Runnable() {
    public void run() {
        while (running) {
           // do something in the loop
        }
    }
}).start();
...

// later, in another thread, you can shut it down by setting running to false
running = false;

Нам нужно использовать volatile boolean, чтобы изменения в поле в одном потоке были видны в другом потоке.

...