如何停止执行从线程的run()方法调用的方法

时间:2017-04-18 08:47:39

标签: java multithreading

这是我的主题: -

Thread t=new Thread(){
  public void run(){
      downloadFile();
  }
}
t.start();

public static void main(){
  t.interrupt();
}

这里downloadFile()是长时间运行的方法(从服务器下载文件) 问题是,即使t.interrupt()被调用,downloadFile()方法仍然保持运行,这是不期望的。我希望downloadFile()方法在线程中断后立即终止。我应该如何实现它?

感谢。

EDIT1:

下面是downloadFile()框架,它调用其余的API来获取文件:

void downloadFile(){
  String url="https//:fileserver/getFile"
  //code to getFile method  
}

2 个答案:

答案 0 :(得分:0)

您的Runnable需要存储AtomicBoolean标记,以表明它是否已被中断。

interrupt方法应该将标志设置为true。

downloadFile()方法需要检查下载循环中的标志 ,如果已设置,则中止下载。

这样的事情是实现它的唯一干净方式,因为只有downloadFile知道如何安全,干净地中断自己,关闭套接字等。

答案 1 :(得分:-1)

您需要一些标志来通知线程终止:

public class FileDownloader implements Runnable {
    private volatile boolean running = true;

    public void terminate() {
        running = false;
    }

    @Override
    public void run() {
        while (running) {
            try {
                downloadFile();
            } catch (InterruptedException e) {
                running = false;
            }
        }

    }
}

在main中:

FileDownloader fileDownloaderRunnable = new FileDownloader();
Thread thread = new Thread(fileDownloaderRunnable);
thread.start();
//terminating thread
fileDownloaderRunnable.terminate();
thread.join();