从main()终止Runnable()对象

时间:2012-08-31 06:13:51

标签: java multithreading stream 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对象。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么问题是,st.read()可能永远阻止。您可以做的是,您可以在一段时间后调用Thread.interrupt来中断正在运行的线程。 (在主线程上,在可运行的线程上执行此操作。)替代方法是使用传递runnable的FutureTask,然后使用超时调用get()。 顺便说一句,这是一个类似的问题:Is setting a timeout on ObjectInputStream.readObject() safe?


中断的另一个重要因素。它不会隐式阻止阻塞,你必须继承Thread而不是实现Runnable并覆盖interrupt来关闭流(然后调用super.interrupt)。另一种方法是从其他线程关闭流。