NIO-实践-多线程实例

时间:2013-10-17 19:42:35
【文件属性】:
文件名称:NIO-实践-多线程实例
文件大小:5KB
文件格式:ZIP
更新时间:2013-10-17 19:42:35
NIO 非阻塞 多线程 NIO用于高性能Socket编程由来已久,网络也有较为丰富的原理和源代码。我这里主要介绍几点经验总结: 1.Selector.select()在筛选就绪的SelectionKey的时候,采用的是阻塞模式。同时只要在就绪的SelectionKey列表中有至少一个SelectionKey存在,前述方法均将返回。 SocketChannel被Selector检查,检查其声称可以接受的状态是否已经产生,如当SocketChannel在向Selector注册是设置了可接受状态为Read,此时当SocketChannel接收到数据后将进入可读状态。 如果需要实现一个线程或有效个线程负责对SocketChannel数据的读操作,为了保证线程安全,同一时间需要保证只有一个线程在负责读操作。即需要采用SelectionKey.cancel()从注册的Selector中取消对该Selection的监视,防止同时多个线程获取到SelectionKey的事件 2.注册在向Selector注册通道的时候,如果register方法抛出KeyCancelledException表明,当前正在注册的SocketChannel在前一阶段已经注册过,但对应的SelectionKey已处于Cancel状态,此时,应该将通道的注册至于Selector.select()之后注册,这样可以在注册通道时保证SelectionKey的状态不为cancel 本文粘贴多线程在NIO环境下的基本运用示例代码,同时演示了一个线程如何对多个连接进行读写的操作。
【文件预览】:
nio-test
----.project(384B)
----.settings()
--------org.eclipse.jdt.core.prefs(629B)
----src()
--------NBTest.java(5KB)
--------Reader.java(2KB)
--------说明.txt(198B)
--------Writer.java(1KB)
----.classpath(299B)

网友评论

  • 谢谢分享,正是我所需要的
  • 基础知识,适合初学者学习使用
  • 谢谢分享,现在正在学习,有帮助