我有几个实现Runnable接口的对象,我在单独的Threads中执行它们。基本上在run()
Runnable 对象的方法中,我做了一些网络活动,包括调用在等待输入(来自网络)时阻塞的方法。请注意,我没有任何故意的暂停,即Thread.sleep()
通话。任何暂停都是由调用可能阻塞的方法引起的。
这些 Runnable 对象在 GUI 的控制下,因此 GUI 界面和我希望提供给用户的一个功能是能够结束执行我的 Runnable 对象的线程,但是我无法理解如何执行此操作。
一种明显的方法是调用 Runnable 对象 Thread 的 Thread.interrupt() 方法,但是对 Thread 方法的调用如何传播到 Runnable 对象?例如我不能使用 try-catch,InterruptedException
在 Runnable 对象中捕获似乎是不允许的;我的 IDE(netbeans)抱怨InterruptedException
从未在run()
方法中抛出。
我的代码在下面,为简洁起见。以下行在 GUI 线程的 GUI 代码中执行:
digiSearch = new DigiSearch(hostIP,this);
digiSearchThread = new Thread(digiSearch);
digiSearchThread.start();
以下是我的 Runnable 类,我希望/需要在其中捕获其执行线程的中断。
public class DigiSearch implements Runnable {
private String networkAdapterIP;
private DigiList digiList;
public DigiSearch (String ipAddress, DigiList digiList){
networkAdapterIP = ipAddress;
this.digiList = digiList;
}
@Override
public void run() {
try{
/*
* Do some network and other activities here which includes calling some blocking methods. However I would like to interrupt the run() method if possible by calling Thread.interrupt()
*/
} catch (Exception ex){
digiList.digiListException(ex);
} catch (Throwable t){
System.out.println("Search thread interrupted");
}
}
}
有人可以启发我如何实现这一目标,或者解决我对中断线程的误解吗?