0

这是我的 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 对象。我怎样才能做到这一点?

4

1 回答 1

1

如果我理解正确,那么您的问题是,这st.read()可能会永远阻塞。您可以做的是,您可以在经过一段时间后通过调用Thread.interrupt来中断正在运行的线程。(在您的可运行线程上从您的主线程执行此操作。)另一种方法是使用您传递可运行的FutureTaskget() ,然后在超时时调用它。
顺便说一句,这是一个类似的问题:在 ObjectInputStream.readObject() 上设置超时是否安全?


还有一件事对打断很重要。它不会隐式停止阻塞,您必须继承Thread而不是实现Runnable和覆盖interrupt以关闭流(然后调用super.interrupt)。另一种方法是关闭来自其他线程的流。

于 2012-08-31T06:37:38.680 回答