JAVA NIO中selectedKeys返回的键集,对其中的SelectionKey执行操作之后,是否需要在selectedKeys()中对其执行remove 操作
今天一个东西需要用到java nio的东西。在网上查了一下资料。之前看过这部分的内容,但好长一段时间没有用,也就忘得七七八八了。如今是温故而知新,但其中遇到了些疑问:
先贴上代码吧:
public static void main(String[] args) throws Exception{
Thread sh=new Thread(new Runnable() {
public void run(){
try{
ServerSocket ss=new ServerSocket(3000);
Socket client=ss.accept();
OutputStream os=client.getOutputStream();
while(true){
os.write("Helloworld".getBytes());
Thread.sleep(1000);
}
}catch(Exception e){
e.printStackTrace();
}
}
});
sh.start();
SocketChannel sc=SocketChannel.open();
sc.socket().connect(new InetSocketAddress("localhost",3000) );
sc.configureBlocking(false);
Selector selector=Selector.open();
sc.register(selector,SelectionKey.OP_READ);
ByteBuffer byteBuffer=ByteBuffer.allocate(1000);
while(true){
if(selector.select()>0){
Set<SelectionKey> sks=selector.selectedKeys();
Iterator<SelectionKey> it = sks.iterator();
while(it.hasNext()){
SelectionKey key=it.next();
if(key.isReadable()){
System.out.println("is Readable() ");
SocketChannel isc=(SocketChannel)key.channel();
isc.read(byteBuffer);
}
it.remove();
}
}
System.out.println("return from select() ");
}
}
关于是否需要it.remove()这一行呢。
按照上面运行的结果:
is Readable()
return from select()
is Readable()
return from select()
is Readable()
return from select()
is Readable()
return from select()
然后把sks.remove(key)这一行注释掉,再次运行:
is Readable()
return from select()
return from select()
return from select()
return from select()
return from select()
return from select()
return from select()
return from select()
return from select()
return from select()
return from select()
return from select()
return from select()
...
说明了,如果不对已经处理完的SelectionKey在selectedKeys中执行remove操作的话。下一次select()操作将会直接返回,但其返回的值是0。Selector类型于“水平触发”,但与水平触发不一样的是,下一次Selector.select的时候,并不会返回上一次没有remove掉的键集。
JAVA NIO中selectedKeys返回的键集,对其中的SelectionKey执行操作之后,是否需要在selectedKeys()中对其执行remove 操作的更多相关文章
- Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- Java MyBatis 插入数据库返回主键--insertSelective这样就不用每次到数据库里面查询了
insertSelective---Java MyBatis 插入数据库返回主键--insertSelective这样就不用每次到数据库里面查询了 https://www.cnblogs.com/xi ...
- Mybatis中insert返回主键ID
记录解决的过程,这里就不搬砖了. 1.获取insert后的主键id 原文链接:http://www.cnblogs.com/fsjohnhuang/p/4078659.html 2.insert后返回 ...
- JAVA NIO学习三:NIO 的非阻塞式网络通信
紧接着上一章,我们继续来研究NIO,上一章中我们讲了NIO 中最常见的操作即文件通道的操作,但实际上NIO的主要用途还是在于网络通信,那么这个时候就会涉及到选择器,这一章我们就会对其进行讲解操作. 一 ...
- JAVA NIO 简单介绍
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00918492 一:为什么要使用NIO技术 ...
- Java NIO简单介绍(二)
上一篇<NIO简单介绍(一)>中讲解了NIO中本地IO相关的内容,这篇重点介绍的NIO的非阻塞式网络通信 一.阻塞与非阻塞 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read ...
- 【Java NIO】一文了解NIO
Java NIO 1 背景介绍 在上一篇文章中我们介绍了Java基本IO,也就是阻塞式IO(BIO),在JDK1.4版本后推出了新的IO系统(NIO),也可以理解为非阻塞IO(Non-Blocking ...
- java nio使用方法(转)
最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下 ...
- 3、谈谈 Java NIO
在 JDK1.4 之后,为了提高 Java IO 的效率,Java 提供了一套 New IO (NIO),之所以称之为 New,原因在于它相对于之前的 IO 类库是新增的.此外,旧的 IO 类库提供的 ...
随机推荐
- Hardly Hard
You have been given the task of cutting out a quadrilateral slice of cake out of a larger, rectangul ...
- poj3159 最短路(差分约束)
题意:现在需要分糖果,有n个人,现在有些人觉得某个人的糖果数不能比自己多多少个,然后问n最多能在让所有人都满意的情况下比1多多少个. 这道题其实就是差分约束题目,根据题中给出的 a 认为 b 不能比 ...
- (转)一文学会用 Tensorflow 搭建神经网络
一文学会用 Tensorflow 搭建神经网络 本文转自:http://www.jianshu.com/p/e112012a4b2d 字数2259 阅读3168 评论8 喜欢11 cs224d-Day ...
- JSBinding + SharpKit / 初体验:下载代码及运行Demo
QQ群:189738580 以下是群主维护的JSB版本: git地址:https://github.com/qcwgithub/qjsbunitynew.git插件源码地址(不包含SpiderMonk ...
- XunSearch(讯搜)的使用教程步骤
一.安装编译工具 yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel ...
- C++ string::size_type 类型【转】
int main() { string str("Hello World!\n"); cout << "The size of " << ...
- tagName和nodeName的区别
首先介绍DOM里常见的三种节点类型(总共有12种,如docment):元素节点,属性节点以及文本节点,例如<h2 class="title">head</h2 ...
- 目录处理工具类 DealWithDir.java
package com.util; import java.io.File; /** * 目录处理工具类 * */ public class DealWithDir { /** * 新建目录 */ p ...
- 【spring】non-compatible bean definition of same name and class
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected excep tion parsing XML do ...
- @GeneratedValue - fancychendong的专栏 - 博客频道 - CSDN.NET
登录|注册 收藏成功 确定 收藏失败,请重新收藏 确定 标题 标题不能为空 网址 标签 摘要 公开 取消收藏 分享资讯 传PPT/文档 提问题 写博客 传资源 创建项目 创建代码片 设置昵称编辑自我介 ...