随笔分类 -  多线程高并发 / NIO

摘要:Stream、Channel 1、Stream 不会自动缓冲数据,Channel 利用系统提供的发送缓冲区、接收缓冲区(更底层) 2、Stream 仅支持阻塞 API,Channel 同时支持阻塞、非阻塞 API,网络 Channel 可配合 Selector 实现多路复用 3、二者均为全双工,即读 阅读全文
posted @ 2022-10-31 09:51 半条咸鱼 编辑
摘要:多路复用 1、单线程可以配合 Selector 完成对多个 Channel 可读写事件的监控 2、多路复用仅针对网络 I/O,普通文件 I/O 无法利用多路复用 3、Selector 保证 (1)有可连接事件时才去连接 (2)有可读事件才去读取 (3)有可写事件才去写入 4、限于网络传输能力,Cha 阅读全文
posted @ 2022-10-31 08:52 半条咸鱼 编辑
摘要:AsynchronousChannel public interface AsynchronousChannel extends Channel 1、支持异步 I/O 操作的通道 2、异步 I/O 操作通常采用以下两种形式之一 (1)Future<V> operation(...) (2)void 阅读全文
posted @ 2022-10-29 15:53 半条咸鱼 编辑
摘要:概述 1、NIO 对非阻塞 Socket 操作支持的组件,封装 Socket 上封装一层,主要支持非阻塞的读写,同时改进传统的单向流 API,Channel 同时支持读写 (1)主要实现类:DatagramChannel、SocketChannel、ServerSocketChannel (2)在被 阅读全文
posted @ 2022-10-29 10:04 半条咸鱼 编辑
摘要:StandardCharsets 1、常规定义的标准 Charsets 2、这些字符集保证在 Java 平台的每个实现上都可用 public final class StandardCharsets { private StandardCharsets() { throw new Assertion 阅读全文
posted @ 2022-10-28 00:59 半条咸鱼 编辑
摘要:概述 1、文件锁是进程级别的,不是线程级别的 2、文件锁可以解决多个进程并发访问、修改同一个文件的问题,但不能解决多线程并发访问、修改同一文件的问题 3、使用文件锁时,同一进程内的多个线程,可以同时访问、修改此文件 4、文件锁是当前程序所属的 JVM 实例持有的,一旦获取到文件锁(对文件加锁),要调 阅读全文
posted @ 2022-10-28 00:18 半条咸鱼 编辑
摘要:概述 1、Java NIO 管道是 2 个线程之间的单向数据连接 2、Pipe 有一个 Pipe.SourceChannel 通道和一个 Pipe.SinkChannel 通道,数据会被写到 sink 通道,从 source 通道读取 3、一旦将一些字节写入 sink 通道,就可以从 source 阅读全文
posted @ 2022-10-27 23:23 半条咸鱼 编辑
摘要:Path 接口 1、是 Java NIO 更新的一部分,在 Java 7 中添加到 Java NIO 2、完全限定名称:java.nio.file.Path 3、Java Path 实例表示文件系统中的路径 (1)一个路径可以指向一个文件或一个目录 (2)路径可以是绝对路径,也可以是相对路径 (3) 阅读全文
posted @ 2022-10-27 22:31 半条咸鱼 编辑
摘要:概述 1、用于读取,写入,映射和操作文件的通道 2、只能在阻塞模式下工作,所以无法搭配 Selector 使用 获取 FileChannel 对象 1、返回与该 FileInputStream 相关的唯一 FileChannel 对象 public FileChannel getChannel() 阅读全文
posted @ 2022-10-26 22:53 半条咸鱼 编辑
摘要:一般读写步骤 1、向 buffer 写入数据 (1)当向 buffer 写入数据时,buffer 会记录写了多少数据 2、调用 flip(),切换为读模式 (1)flip() 使 buffer 中的 limit 变为 position,position 变为 0 (2)读模式下,可以读取之前写入到 阅读全文
posted @ 2022-10-26 00:39 半条咸鱼 编辑
摘要:Channel 1、Channel 表示打开到 IO 设备(如:文件、套接字)的连接 2、Channel 类似于 Stream (1)Stream 为单向通道:输入 / 输出 (2)Channel 为读写数据的双向通道,可以从 Channel 将数据读取 Buffer,可以将数据写入 Buffer 阅读全文
posted @ 2022-10-25 09:16 半条咸鱼 编辑

点击右上角即可分享
微信分享提示