一些输入输出对象(如InputStream)不支持中断,并且在读写期间源不能被关闭。
例如:
尝试关闭源代码
两种解决方案都不起作用。在读入至少一个字母后,它会中断或关闭。
我的问题是:有没有办法在阻塞的read()操作期间中断或关闭源?
我在这里找到了类似的东西 - Is it possible to read from a InputStream with a timeout?。我想知道是否还有其他解决方案(特别是使用中断或关闭源),以停止线程,或者唯一的方法是与那个棘手的方式相关联。
例如:
class InputStreamOperation1 implements Runnable
{
static InputStream stream;
InputStreamOperation1(InputStream stream) { this.stream = stream; }
public void run()
{
System.out.println("InputStreamOperation - the beginning");
try
{
stream.read(); //blocking operation
} catch (Exception e)
{
System.out.println("InputStreamOperation interrupted");
}
System.out.println("InputStreamOperation - the end");
}
}
尝试中断:
ExecutorService executor = Executors.newCachedThreadPool();
Future<?> f = executor.submit(new InputStreamOperation1(System.in));
TimeUnit.MILLISECONDS.sleep(100);
System.out.println("Interrupting InputStream");
f.cancel(true); // Interrupts if running
System.out.println("Interrupt sent to InputStream");
尝试关闭源代码
Future<?> f = executor.submit(new InputStreamOperation1(System.in));
TimeUnit.MILLISECONDS.sleep(100);
System.out.println("Closing source in InpuStream");
try
{
System.in.close();
} catch (IOException e)
{
System.out.println("Error during closing InputStreamOperation");
}
System.out.println("Closed source in InputStream");
两种解决方案都不起作用。在读入至少一个字母后,它会中断或关闭。
我的问题是:有没有办法在阻塞的read()操作期间中断或关闭源?
我在这里找到了类似的东西 - Is it possible to read from a InputStream with a timeout?。我想知道是否还有其他解决方案(特别是使用中断或关闭源),以停止线程,或者唯一的方法是与那个棘手的方式相关联。
InterruptibleChannel
相关联,解决方案与使用另一个类的建议相关。 - Pawel