这是我的主题: -
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
}
答案 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();