Java高并发教程:详解NIO Selector类

Java高并发教程:详解NIO Selector类

NIO Selector

Java NIO Selector可以检查一个或多个Java NIO Channel实例,并确定哪些通道可供使用,例如read或write。 这样, 单个线程可以管理多个通道,从而可以管理多个网络连接。Selector 选择器的使命是 完成IO的多路复用。一个通道代表一条连接通路, 通过选择器可以同时监控多个通道IO(输入输出)状况。选择器和通道的关系,是监控和被监控的关系。

如下图所示为一个Selector同时监控3个Channel:

Java高并发教程:详解NIO Selector类

选择器提供了独特的API方法,能够选出Select所监控的通道拥有哪些已经准备好的,就绪的IO操作事件。可供选择器监控的通道IO事件类型,包括以下:

  1. 可读:SelectionKey.OP_READ
  2. 可写:SelectionKey.OP_WRITE
  3. 连接:SelectionKey.OP_CONNECT
  4. 接收:SelectionKey.OP_ACCEPT

判断 一个通道能否被选择器监控或者选择,有一个前提:判断它是否继承了抽象类SelectableChannel

注: IO事件指的是通道的某个IO操作的一种就绪状态

参考资料

Original: https://www.cnblogs.com/MrSaver/p/13138452.html
Author: 子烁爱学习
Title: Java高并发教程:详解NIO Selector类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538104/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java-抽象类笔记

    抽象方法 使用 abstract 修饰的方法, 没有方法体,只有声明。 定义的是一种”规范”, 就是告诉子类必须要给抽象方法提供具体的实现。 抽象类 包含 …

    Java 2023年6月15日
    060
  • 记一次Idea无法打开记录(idea升级)

    记一次Idea无法打开记录 前言,本来今天是打算升级Idea,然后体验一波的,结果升级完之后,发现无法打开idea(双击之后并没有任何打开的反应)。 原因排查,打开idea所在目录…

    Java 2023年6月5日
    064
  • 谈谈高并发系统的一些解决方案

    本文结合项目经验,整理一份大纲,供参考。 常用指标 RT(Response Time):响应时间。可能会衍生出 TP999、TP99、TP95、TP90等指标。一般在几毫秒到几百毫…

    Java 2023年6月16日
    087
  • 文档加密、解密jar包

    此jar包支持pdf、excel、txt等格式文档的加密(本jar包方法加密后的解密)实现,满足项目中上传到服务器的文档的加密方法,保证用户信息安全,提高系统的安全级别。此方法是用…

    Java 2023年6月13日
    087
  • MSSQL中UPDATE与 INNER JOIN联用的语法结构

    | 0.16分钟 | 267.2字符 | 1、引言&背景 2、解决方案 3、声明与参考资料 | SCscHero | 2022/4/30 PM9:36 | 系列 | 已完成…

    Java 2023年6月5日
    087
  • Java-调用R语言和调用Python(前后端展示)

    1. 背景 R语言和Python用于数据分析和数据处理,并生成相应的直方图和散点图 需要实现一个展示平台,后端使用Java,分别调用R语言和调用Python,并返回数据和图给前端显…

    Java 2023年6月8日
    093
  • Mysql: BLOB, TEXT, GEOMETRY or JSON column ‘Fresp’ can’t have a default value

    环境:MySQL8.0 问题 建表的时候出现错误,语句如下: create table t_user ( Fid bigint not null auto_increment co…

    Java 2023年6月7日
    085
  • NoteOfMySQL-08-视图

    视图是从一个表或多个表中导出的表,是一种虚拟存在的表,不占用存储空间。视图可以使用户的操作更方便,并且可以保障数据库系统安全性。 1. 视图概述 视图中保存的仅仅是一条select…

    Java 2023年6月5日
    081
  • Spring Boot2 系列教程(三十三)整合 Spring Security

    Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经发展了多年了,但是使…

    Java 2023年5月30日
    093
  • 详解Spring中的Event事件处理机制和原理

    我们都知道 Spring 的核心是 ApplicationContext,它负责管理 bean 的完整生命周期。当spring加载 bean 时,ApplicationContex…

    Java 2023年5月30日
    0142
  • Mybatis-plus的自定义分页搭配sql Server数据库使用

    原文出处:mybatisplus查询分页并且排序报错解决方法,适用于自定义sql和sqlserver_十七梦的博客-CSDN博客 一开始使用过的是官方文档来写分页,结果出现了如果不…

    Java 2023年6月6日
    0103
  • 二叉树查找和删除指定结点

    二叉树查找指定的节点 前序查找的思路 1.先判断当前节点的no是否等于要查找的2.如果是相等,则返回当前节点3.如果不等,则判断当前节点的左子节点是否为空,如果不为空,则递归前序查…

    Java 2023年6月15日
    079
  • Docker安装部署Mysql8(以作数据持久化)

    1.创建容器并进行持久化处理 #拉取镜像 docker pull mysql:8.0.20 #启动镜像,用于拷贝配置文件到宿主机 docker run -p 3306:3306 -…

    Java 2023年6月15日
    078
  • Java 线程安全 与 锁

    Java 线程安全 与 锁 多线程内存模型 线程私有栈内存 每个线程 私有的内存区域 进程公有堆内存 同一个进程 共有的内存区域 为什么会有线程安全问题? 多个线程同时具有对同一资…

    Java 2023年6月5日
    090
  • Kafka为什么性能这么快?4大核心原因详解

    Kafka的性能快这是大厂Java面试经常问的一个话题,下面我就重点讲解Kafka为什么性能这么快的4大核心原因@mikechen 1、页缓存技术 Kafka 是基于操作系统 的页…

    Java 2023年6月15日
    089
  • Linux操作系统–定时任务

    最近在学习Linux操作系统。学到了关于定时任务的章节,作为一个总结写下这篇文章。在Linux中,我们可以将耗时大的任务如复制大文件,压缩、解压缩大文件等放进定时任务中(深夜执行,…

    Java 2023年6月14日
    0208
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球