南京六合区Java培训怎么收费
Java是个时髦语言。它吸收了计算机科学领域的各种较新成果,作为一个分布式的,面向对象的程序设计语言,可以让位于任何地方的任何计算机应用网络上的应用程序。
初识Java
Java入门,Java基础,Java使用技巧
面向对象编程
Java面向对象编程理论与应用,集合框架与数据结构, Java文件操作与网络编程
数据库理论与应用
数据存储的概念及理论,数据库技术及产品的发展史, 当下流行数据库MySQL和Oracle数据库的使用
互联网网站及信息系统的开发与应用
网站页面及效果设计,交互式网站开发技术及开发流 程,网站开发框架及简单企业开发应用
企业团队项目协同开发与维护
协同开发概述,协同开发技术原理与应用
商业项目模块化基础与应用
软件项目自动化构建概述,自动化构建原理,自动化构建技术与应用
软件项目测试与实施
软件测试概述,软件测试流程及测试工具使用,测试档案及测试用例编写,测试报告分析
企业主流开发框架应用与优化
框架技术概述,框架技术发展史,主流框架介绍, 主流框架的使用,整合多个框架综合开发项目
Selector 是什么
Selector(选择器)是一个特殊的组件,用于采集各个通道的状态(或者说事件)。我们先将通道注册到选择器,并设置好关心的事件,然后就可以通过调用select()方法,静静地等待事件发生。
通道有如下4个事件可供我们监听:
Accept:有可以接受的连接
Connect:连接成功
Read:有数据可读
Write:可以写入数据了
为什么要用Selector
前文说了,如果用阻塞I/O,需要多线程(浪费内存),如果用非阻塞I/O,需要不断重试(耗费CPU)。Selector的出现解决了这尴尬的问题,非阻塞模式下,通过Selector,我们的线程只为已就绪的通道工作,不用盲目的重试了。比如,当所有通道都没有数据到达时,也就没有Read事件发生,我们的线程会在select()方法处被挂起,从而让出了CPU资源。
使用方法
如下所示,创建一个Selector,并注册一个Channel。
注意:要将 Channel 注册到 Selector,首先需要将 Channel 设置为非阻塞模式,否则会抛异常。
Selector selector = Selector.open();
channel.configureBlocking(false);
SelectionKey key = channel.register(selector, SelectionKey.OP_READ);
register()方法的第二个参数名叫“interest set”,也就是你所关心的事件集合。如果你关心多个事件,用一个“按位或运算符”分隔,比如
SelectionKey.OP_READ | SelectionKey.OP_WRITE
这种写法一点都不陌生,支持位运算的编程语言里都这么玩,用一个整型变量可以标识多种状态,它是怎么做到的呢,其实很简单,举个例子,首先预定义一些常量,它们的值(二进制)如下
可以发现,它们值为1的位都是错开的,因此对它们进行按位或运算之后得出的值就没有二义性,可以反推出是由哪些变量运算而来。怎么判断呢,没错,就是“按位与”运算。比如,现在有一个状态集合变量值为 0011,我们只需要判断 “0011 & OP_READ” 的值是 1 还是 0 就能确定集合是否包含 OP_READ 状态。
然后,注意 register() 方法返回了一个SelectionKey的对象,这个对象包含了本次注册的信息,我们也可以通过它修改注册信息。从下面完整的例子中可以看到,select()之后,我们也是通过获取一个 SelectionKey 的集合来获取到那些状态就绪了的通道。
更多培训课程,学习资讯,课程优惠等学校信息,请进入 南京雨花台区IT培训南京江宁区php培训南京六合区java培训 网站详细了解,免费咨询电话:400-998-6158