这是我的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对象。我怎样才能做到这一点?
如果我理解正确,那么你的问题是,st.read()
可能会永远阻塞。您可以做的是在一段时间后通过调用thread.interrupt来中断正在运行的线程。(在可运行线程上的主线程中执行此操作。)另一种选择是使用FutureTask,您将可运行线程传递给它,然后在超时时调用它的get()
顺便说一句,这是一个类似的问题:在ObjectInputStream.readObject()上设置超时是否安全?
打断别人还有一件很重要的事。它不会隐式停止阻塞,您必须将Thread
子类化,而不是实现Runnable
,并覆盖interrupt
以关闭流(然后调用super.interrupt
)。另一种选择是关闭来自其他线程的流。