如何停止Runnable线程或"接口"

时间:2015-04-21 16:17:53

标签: java android multithreading

我需要以某种方式停止此代码是否有任何方法可以做到这一点。如果有人可以回答问题并发布链接到你可以学习线程的地方,我就不和线程保持一致了,但是在开始的时候我没有读过很多关于java的书籍基础知识有点轻松,除了文件更改之类的东西BufferedWriters和东西。所以任何可以微调基础知识或从那里去的地方。对不起,我在一个问题上有疑问。 :)

private final Runnable updateCircle = new Runnable() {
        @Override 
        public void run() {
            lastColor = random.nextInt(2) == 1 ? redColor : greenColor;
            paint.setColor(lastColor);
            invalidate();
            handler.postDelayed(this, 1000);
        }
    };

2 个答案:

答案 0 :(得分:1)

Java中的线程当前轮询一个标志,以查看该线程是否为interrupted。在线程上调用interrupt()后,Thread.interrupted()函数将返回true。因此,只要Thread.interrupted()返回false

,就可以运行
while (!Thread.interrupted()){
    ...
}

答案 1 :(得分:0)

只有一种方法可以正确地停止线程:从这个线程的代码中,通过离开run()方法。最常用的方法是实现这一目标:

  1. 易失性标志 - 在线程执行CPU工作时很有用

    volatile boolean stop = false
    void run() {
        doComputation();
        if (stop) return;
        doAnotherComputation();
        if (stop) return;
        doMoreComputation();
    }
    
  2. 中断 - 当你的线程主要睡在锁上时

    void run() {
      synchronized(lock) {
        lock.wait(); //wait() will throw InterruptedException here
      }
    }
    //from another thread
    myThread.interrupt();`
    
  3. 因此,如果您调用库代码需要很长时间并且不对interrupt()作出反应,则无法正确中止此代码以停止正在运行的线程。