java非阻塞通信学习

来源:互联网 发布:大麦盒子dm1016网络锁 编辑:程序博客网 时间:2024/05/22 07:03

  java非阻塞通信思想按照书上说的来讲,就是你在烧开水也在做饭,不用找两个人去完成这两件事情。一个人完成这两件事就行了,这个人不停的看水是否烧开,饭是否做好

一旦其中某个事情发生就做相应的处理。生活例子读起来很简单,百度了很久也没有找到非阻塞通信的和阻塞通信比较的优缺点,可能由于非阻塞通信是JSE1.4以后出现的原因吧。

  非阻塞通信相对阻塞通信来说要复杂很多,其中要进行非阻塞通信编程必须要会使用几个类:

1,Buffer,缓存区类:ByteBuffer,CharBuffer...

2,Charset,字符编码类

3,SelectableChannel通道类,主要有两个子类,ServerSocketChannel和SocketChannel,在非阻塞通信中所有数据的收发都是通过Buffer,虽然这两个类的方法read和write都是向通道Channel直接写入和读取数据;还有一点就是这两个类默认都是阻塞模式,需要手动设置为非阻塞模式,调用他们的configureBlocking(false)即可

4,Selector类,在阻塞通信中式依靠事件驱动的,ServerSocketChannel和SocketChannel都要向Selector注册相应的事件后才能够被处理;Selector维护了三个集合,all-keys,selected-keys,canclled-keys他们都是事件的集合,事件句柄SelectionKey的集合

5,SelectionKey类,ServerSocketChannel和SocketChannel向Selector注册的事件句柄

0 0