Java AbstractInterruptibleChannel虚拟类

总结

  1. AbstractInterruptibleChannel虚拟类是可中断通道的基本实现类(模板方法类)
  2. AbstractInterruptibleChannel虚拟类封装了实现通道异步关闭和中断所需的小型框架,具体的通道类必须在调用可能无限期阻塞的I/O操作之前和之后分别调用begin和end方法。为了确保始终调用end方法,应在try finally块中使用这些方法
  3. 使用示例
 boolean completed = false;
 try {
     begin();
     completed = ...;    // Perform blocking I/O operation
     return ...;         // Return result
 } finally {
     end(completed);
 }
  1. end方法的completed参数说明I/O操作是否实际完成,也就是说,它是否有任何对调用程序可见的效果。例如,对于读取字节的操作,当且仅当某些字节实际传输到调用程序的目标缓冲区时,此参数应为true
  2. 具体的通道类还必须实现implCloseChannel方法,如果在通道上的本机I/O操作中阻塞另一个线程时调用该方法,则该操作将立即返回,方法是引发异常或正常返回。如果一个线程被中断,或者阻塞它的通道被异步关闭,那么通道的end方法将抛出相应的异常
  3. 此类的close方法实现了java.nio.channels.Channel规范所需的同步, implCloseChannel方法的实现不需要与可能试图关闭通道的其他线程同步

AbstractInterruptibleChannel虚拟类方法

方法名作用
final void close()关闭此通道,如果通道已关闭,则此方法立即返回。否则,它会将通道标记为关闭,然后调用implCloseChannel方法以完成关闭操作
abstract void implCloseChannel()关闭此通道,close方法调用此方法,以执行关闭通道的实际工作。仅当通道尚未关闭时才调用此方法,并且从未多次调用此方法,此方法的实现必须让在该通道上的I/O操作中被阻塞的任何其他线程立即返回,可以通过引发异常或正常返回
final boolean isOpen()判断通道是否打开
final void begin()标记可能无限期阻塞的I/O操作的开始,此方法应与end方法一起调用,使用try finally块, 以实现此通道的异步关闭和中断
final void end(boolean completed)标记可能无限期阻塞的I/O操作的结束,completed为 true 表示I/O操作成功完成
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lolxxs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值