java 注册监听_java注册监听模型
Java的Selector调用操作系统层的Multiplexing IO(多路复用模型),本身只是个API调用。而多路复用是这个样子的: I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态(对应空管塔里面的Fight progress strip槽)来同时管理多个I/O流. 而这段点代码SelectionKey key = channel.register(selector, SelectionKey.OP_READ); register()方法的第二个参数,这是一个”interest集合“,意思是在通过Selector监听Channel时对什么事件感兴趣. 可以监听四种不同类型的事件: Connect Accept Read Write 通道触发了一个事件意思是该事件已经就绪。所以,某个channel成功连接到另一个服务器称为”连接就绪“。一个server socket channel准备好接收新进入的连接称为”接收就绪“。一个有数据可读的通道可以说是”读就绪“。等代写数据的通道可以说是”写就绪“。 只要ServerSocketChannel及SocketChannel向Selector注册了特定的事件,Selector就会监控这些事件是否发生。SelectableChannel的register()方法返回一个SelectionKey对象,该对象是用于跟踪这些被注册事件的句柄。在执行Selector的select()方法时,如果与SelectionKey相关的事件发生了,这个SelectionKey就被加入到selected-keys集合中,程序直接调用selected-keys集合的remove()方法,或者调用它的iterator的remove()方法,都可以从selected-keys集合中删除一个SelectionKey对象。 通过调用某个SelectionKey的cancel()方法,关闭其通道,或者通过关闭其选择器来取消该Key之前,它一直保持有效。取消某个Key之后不会立即从Selector中移除它,相反,会将该Key添加到Selector的已取消key set,以便在下一次进行选择操作的时候移除它。所以简单来说,上面的那个selectionKey就是一种注册事件,而每一种事件对应着这个连接的一种状态,多路复用模型会检查每个连接所对应的状态,如果达到其中的一种状态,就会触发对应的事件处理逻辑。
来源:云原生后端社区
java 注册监听_java注册监听模型相关推荐
- java 多个监听_java中监听一个客户端怎么做?监听多个怎么做?
随着时代的不断进步与发展,人们对于科学技术的使用也越来越普遍化.人们都开始自己学习编程语言以更好的适应时代的发展.今天就来为大家介绍一下,java中监听一个客户端怎么做?监听多个怎么做?一起来看看吧. ...
- java 检测u盘_java实现监听u盘示例分享
package org.load.u; import java.io.file; import java.util.linkedhashmap; import java.util.map; // u盘 ...
- java属性监听_Java event事件监听属性值变化 demo
1.定义一个 ValueChangedEvent ValueChangedEvent用于在设置属性值的时候,触发事件. package org.teamlet; import java.util.Ev ...
- java jmenu 监听_Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- java 监听鼠标点击_java 事件监听 - 鼠标
java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...
- oracle监听静态注册,oracle监听器动态注册于静态注册的区别
1, oracle 10g 用netca方式建立的都默认为动态注册方式 2,如果想改为静态注册的方式则在listener.ora 中加入如下内容即可 SID_LIST_LISTENER = (SID_ ...
- oracle 静态监听 端口,侦听动态注册静态注册local_listener参数端口PORT
之前都是网上看过整理的,今天看到local_listener竟然一点印象都没有,太恐怖,索性再好好整理一下,避免再次忘记. 一.什么是注册 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道 ...
- 安卓传感器全解:注册、注销传感器、监听传感器,距离传感器、方向传感器、陀螺仪、加速计、磁场、气压传感器
全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓传感器全解:注册.注销传感器.监听传感器.距离传感器.方向传感器.陀螺仪.加速计.磁场.气压传感器. 注册.注销.监听传感器 1.自定义传感器监听 ...
- Java中使用JNA实现全局监听Linux键盘事件
title: Java中使用JNA实现全局监听Linux键盘事件 date: 2019-05-03 19:08:00 Java中使用JNA实现全局监听Linux键盘事件 用JNA实现的键盘监听,在Wi ...
最新文章
- mysql双主使用reset master清除日志要小心
- ASP.NET经典How to do文章汇总
- 在html中选项卡怎么做,纯css3制作选项卡
- java元婴期(30)----java进阶(springmvc(4)---参数绑定(下)springmvc校验异常处理)
- 深入浅出RxJava(三:响应式的好处)
- 【ZOJ - 3780】Paint the Grid Again(拓扑排序,图论,证明性质)
- Emulator Error: Could not load OpenGLES emulati...
- html对图片轮播脚本怎么调用,【jquery前端开发】可调整的幻灯片(图片轮播)
- 数据库中union和union all的区别
- 力扣-62 不同路径
- UNIX网络编程卷1 时间获取程序server UDP 协议无关
- 从aspx后台页面向浏览器输出js文件
- MATLAB下载+安装教程
- CatBoost快速入门
- 【转帖】UDIMM、RDIMM、SODIMM以及LRDIMM的区别
- scratch一级考纲
- mysql 存储数据时,报错Cause: java.sql.SQLException: Incorrect string value: '\xF4\x80\xB3\x81\xE8\xAE...'
- 基本弹出窗口代码大全
- 第三方支付接口开发及开发中遇到的坑爹问题
- 微念入局螺蛳粉餐饮供应链,或成下一个颐海、蜀海