Android 你怎么把线圈起来?

Android 你怎么把线圈起来?,android,multithreading,loops,runnable,Android,Multithreading,Loops,Runnable,我有一个包含runnable的线程。 我需要它无限循环,除非被用户取消。 我不知道该怎么办。非常感谢您的帮助。 干杯 我需要它无限循环,除非被用户取消 显然,您可以轻松地在run()方法中添加一个循环: new Thread(new Runnable() { public void run() { while (true) { // do something in the loop } } }).s

我有一个包含runnable的线程。 我需要它无限循环,除非被用户取消。 我不知道该怎么办。非常感谢您的帮助。 干杯

我需要它无限循环,除非被用户取消

显然,您可以轻松地在
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();
如果您询问如何从另一个线程(如UI线程)取消线程操作,则可以执行以下操作:

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
,这样一个线程中字段的更改就可以在另一个线程中看到。

简单地运行循环很容易。但是您可能希望线程处理来自主线程的命令/工作项,对吗?闲着的时候睡觉?告诉你就退出?完美的回答。这就是我需要的一切。干杯。使用易变布尔变量是安全的。对任何基元(和引用)类型的所有读取和写入都始终是原子的(有时除了long和double)。原子布尔变量是一个过度杀伤力,我认为。不确定它本身是否是“过度杀伤力”@Vladimir,但
volatile
也会起作用,是的。