正在从main()终止Runnable()对象



这是我的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)。另一种选择是关闭来自其他线程的流。

相关内容

  • 没有找到相关文章

最新更新