我想实现一个阻止输入的方法,但可以是 Thread.interrupt()'ed。例如,它在 System.in.read() 上阻塞,然后另一个线程可以中断它,因此它会以 InterruptedException 中断阻塞读取。
有什么建议么?谢谢
我想实现一个阻止输入的方法,但可以是 Thread.interrupt()'ed。例如,它在 System.in.read() 上阻塞,然后另一个线程可以中断它,因此它会以 InterruptedException 中断阻塞读取。
有什么建议么?谢谢
首先想到的是BlockingQueue
。一个线程将挂起试图从该队列中获取 smth,而另一个线程将使用元素填充该队列,例如执行读取的线程使用元素System.in
填充BlockingQueue
。因此可以中断另一个线程。
考虑 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);
如果它已经在等待另一个阻塞方法,只需将您的方法声明为抛出 InterruptedException 并且不要捕获原始异常。还是你要求别的?