1. 只有面向
流的(stream-oriented)的通道,如sockets和pipes才能使用非阻塞模式。
2. 关闭通道
在一个通道上多次调用close( )方法是没有坏处的,但是如果第一个线程在close( )方法中阻
塞,那么在它完成关闭通道之前,任何其他调用close( )方法都会阻塞。后续在该已关闭的通道上调
用close( )不会产生任何操作,只会立即返回。
如果一个通道实现InterruptibleChannel接口,它的行为以下述语义为准:如果一个线程在一个通道上被阻塞并且同时被中断(由调用该被阻塞线程的interrupt( )方法的另一个线程中断),那么该通道将被关闭,该被阻塞线程也会产生一个ClosedByInterruptException异常。
可中断的通道也是可以异步关闭的。实现InterruptibleChannel接口的通道可以在任何时候被关闭,即使有另一个被阻塞的线程在等待该通道上的一个I/O操作完成。当一个通道被关闭时,休眠在该通道上的所有线程都将被唤醒并接收到一个AsynchronousCloseException异常。
3. file channel 的内存映射机制,可以了解一下相关的底层内容 |
|