这是我的Runnable对象(在另一个类中):
private class StopFileCopy implements Runnable
{
ObjectInputStream st;
public Runnable(ObjectInputStream st)
{
this.st = st;
}
public void run()
{
if(st.read())
stopWritingToFile = true; // stopWritingToFile is an instance variable of the
// class that contains this StopFileCopy class
}
}
现在问题是整数可能会也可能不会写入流' st。如果没有,那么我需要立即从课外停止这个StopFileCopy对象。我怎么能做到这一点?
答案 0 :(得分:1)
如果我理解正确,那么问题是,st.read()
可能永远阻止。您可以做的是,您可以在一段时间后调用Thread.interrupt来中断正在运行的线程。 (在主线程上,在可运行的线程上执行此操作。)替代方法是使用传递runnable的FutureTask,然后使用超时调用get()
。
顺便说一句,这是一个类似的问题:Is setting a timeout on ObjectInputStream.readObject() safe?
中断的另一个重要因素。它不会隐式阻止阻塞,你必须继承Thread
而不是实现Runnable
并覆盖interrupt
来关闭流(然后调用super.interrupt
)。另一种方法是从其他线程关闭流。