0

我想实现一个阻止输入的方法,但可以是 Thread.interrupt()'ed。例如,它在 System.in.read() 上阻塞,然后另一个线程可以中断它,因此它会以 InterruptedException 中断阻塞读取。

有什么建议么?谢谢

4

3 回答 3

1

首先想到的是BlockingQueue。一个线程将挂起试图从该队列中获取 smth,而另一个线程将使用元素填充该队列,例如执行读取的线程使用元素System.in填充BlockingQueue。因此可以中断另一个线程。

于 2012-12-03T21:40:45.923 回答
1

考虑 java.nio.InterruptibleChannel

If a thread is blocked in an I/O operation on an interruptible channel then another thread may invoke the blocked thread's interrupt method. This will cause the channel to be closed, the blocked thread to receive a ClosedByInterruptException, and the blocked thread's interrupt status to be set.  

以下是如何“中断地”从文件中读取数据

    FileChannel ch = new FileInputStream("test.txt").getChannel();
    ByteBuffer buf = ByteBuffer.allocate(1024);
    int n = ch.read(buf);

当被另一个线程“读取”中断时会抛出ClosedByInterruptException,它是IOException的一个实例。

以下是如何“中断地”从 TCP 服务器读取字节

    SocketChannel ch = SocketChannel.open();
    ch.connect(new InetSocketAddress("host", 80));
    ByteBuffer buf = ByteBuffer.allocate(1024);
    int n = ch.read(buf);
于 2012-12-03T22:49:57.097 回答
0

如果它已经在等待另一个阻塞方法,只需将您的方法声明为抛出 InterruptedException 并且不要捕获原始异常。还是你要求别的?

于 2012-12-03T21:47:21.683 回答