Мне нужно, чтобы этот цикл был бесконечным, если пользователь не отменяет его.
Очевидно, что вы можете легко добавить цикл внутри вашего 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
, чтобы изменения в поле в одном потоке были видны в другом потоке.