你能用Future.cancel(true)中断BufferedReader.readLine()吗?

neo*_*neo 6 java multithreading java.util.concurrent

假设我开始了一个帖子,我有这样的事情:

 ...//initiate all the socket connection
 future = executor.submit
 (  new Runnable()
    {   public void run()
        {   ...
            ...      
            while ((str = in.readLine()) != null)
            {  //do something here

            }

    }

 );
Run Code Online (Sandbox Code Playgroud)

executor是一个ExecutorService对象,并且是一个BufferedReader对象

我知道你可以从另一个线程关闭套接字来中断这个线程.但是当我尝试使用future.cancel(true)方法时,即使它返回true,线程似乎仍然在运行,任何人都知道为什么?或in.readLine()不能以这种方式中断?

Gra*_*ray 10

你能用Future.cancel(true)中断BufferedReader.readLine()吗?

所有的一切future.cancel(true)都是调用thread.interrupt()相关的线程.这将导致sleep()wait()操作抛出InterruptedException并将中断一些特殊的NIO通道.

但是BufferedReader很有可能你不会被打断,因为它很可能是从"普通"套接字或文件中读取的.正如您所提到的,从不同的线程关闭底层套接字是杀死这种IO方法的最佳方法.