您的位置:网站首页 > Java教程 > 正文

Java7 NIO2入门:异步通道API教程

类别:Java教程 日期:2017-4-23 14:35:58 人气: 来源:

  这些类在风格上与 NIO 通道 API 很相似。他们共享相同的方法与参数结构体,并且大多数对于 NIO 通道类可用的参数,对于新的异步版本仍然可用。主要区别在于新通道可使一些操作异步执行。这些类在风格上与 NIO 通道 API 很相似。他们共享相同的方法与参数结构体,并且大多数对于 NIO 通道类可用的参数,对于新的异步版本仍然可用。主要区别在于新通道可使一些操作异步执行。

  异步通道 API 提供两种对已启动异步操作的监测与控制机制。第一种是通过返回一个ncurrent.Future 对象来实现,它将会建模一个挂起操作,并可用于查询其状态以及获取结果。第二种是通过传递给操作一个新类的对象,pletionHandler,来完成,它会定义在操作完毕后所执行的处理程序方法。每个异步通道类为每个操作定义 API 副本,这样可采用任一机制。

  在本文中,介绍了每个通道,并提供一些简单的例子来演示它们的使用方法。这些例子都处于可运行状态,您可在 Oracle 以及 IBM 所提供的 Java 7 版中运行这些例子。以后您将有机会了解 NIO.2 文件系统 API,敬请期待。

  }cancel() 方法可利用一个布尔标志来指出执行接受的线程是否可被中断。这是个很有用的增强;在以前的 Java 版本中,只能通过关闭套接字来中止此类阻塞 I/O 操作。

  接下来,要通过打开并连接与服务器之间的 AsynchronousSocketChannel,来设置客户端:

  两个方法的附件参数都是一个传递到异步操作的对象。如果相同的对象用于多个操作,其可用于追踪哪个操作已完成。

  默认情况下,该文件已打开以供读取。open() 方法可利用附加选项来指定如何打开该文件。例如,此调用打开文件以供读取或写入,如果必要将创建该文件,并在通道关闭或者 JVM 终止时尝试删除文件:

  接下来,可将这些写入文件,写入完成后,就可执行一些操作。 首先要构造一个封装了 “ something ” 的 CompletionHandler ,如清单 2 所示:

  包含要写入内容的 ByteBuffer文件中的绝对要传递给完成处理程序方法的附件对象完成处理程序

  操作必须给出进行读或写的文件中的绝对。文件具有内部标记,来指出读/写发生的,这样做没有意义,因为在上一个操作完成之前,就可以启动新操作,它们的发生顺序无法得到。由于相同的原因,在 AsynchronousFileChannel API 中没有用于设置或查询的方法,在 FileChannel 中同样也没有。

  除了读写方法之外,还支持异步锁定方法,因此,如果当前有其他线程保持锁定时,可对文件进行执行访问锁定,而不必在当前线程中锁定(或者利用 tryLock 轮询)。

  每个异步通道都属于一个通道组,它们共享一个 Java 线程池,该线程池用于完成启动的异步 I/O 操作。这看上去有点像,因为您可在自己的 Java 线程中执行大多数异步功能,来获得相同的表现,并且,您可能希望能够仅仅利用操作系统的异步 I/O 能力,来执行 NIO.2 ,从而获得更优的性能。然而,在有些情况下,有必要使用 Java 线程:比如, completion-handler 方法在来自线程池的线程上执行。

  默认情况下,具有 open() 方法的通道属于一个全局通道组,可利用如下系统变量对其进行配置:

  NIO.2 的异步通道 APIs 提供方便的、平立的执行异步操作的标准方法。这使得应用程序开发人员能够以更清晰的方式来编写程序,而不必定义自己的 Java 线程,此外,还可通过使用底层 OS 所支持的异步功能来提高性能。如同其他 Java API 一样,API 可利用的 OS 自有异步功能的数量取决于其对该平台的支持程度。

  推荐:

  

关键词:java入门教程
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved