返回顶部
首页 > 资讯 > 精选 >day2 Java NIO
  • 769
分享到

day2 Java NIO

2023-06-02 21:06:58 769人浏览 泡泡鱼
摘要

复习1. BlockingQueue:阻塞式队列,使用的时候需要指定容量,而且容量指定之后不可改变。    1. ArrayBlockingQueue:基于数组进行存储。  &nb

复习
1. BlockingQueue:阻塞式队列,使用的时候需要指定容量,而且容量指定之后不可改变。
    1. ArrayBlockingQueue:基于数组进行存储。
    2. LinkedBlockingQueue:基于链表进行存储。在使用的时候可以指定容量也可以不指定。如果不指定,
        则默认按照Integer最大值来计算。
    3. PriorityBlockingQueue:在使用的时候要求元素对应的类必须实现Comparable。在迭代的时候不保证
        元素的排序,只有在一个个的取得时候才能保证。
    4. SynchronousQueue:同步队列。只能存储一个元素。
2. ConcurrentMap:并发映射
    1. ConcurrentHashMap:底层在存储数据的时候是依靠分段机制,在jdk1.8中,采取了CAS无锁算法
        取代了分段锁。底层依然是依靠的数组来作为基本结构,但是从JDK1.8开始,不再采取数组+链表结构而
        是采取数组+红黑树机制。
        1. 红黑树本身是自平衡二叉查找树。
        2. 红黑树的特点
            1. 每一个节点非黑即红
            2. 根节点一定是黑色
            3. 红节点的子节点一定是黑色
            4. 最底层的叶子节点一定是黑色的nil节点
            5. 任意一条路径包含的黑节点的个数是一致的
            6. 插入的节点一定是红色
    3. 红黑树的平衡性修正
        1. 如果父节点以及叔父节点都是红色,则将父节点以及叔父节点涂黑,将祖父节点涂红
        2. 如果叔父节点是黑色,并且当前节点是右子叶,则以当前节点为基准进行左旋
        3. 如果叔父节点是黑色,并且当前节点是左子叶,则以父节点为基准进行右旋
    2. ConcurrentNavigableMap:并发导航映射。实现类之一是采取的跳跃表机制。跳跃表的特点是以空间
        换时间。时间复杂度是O(logn)。
3. 线程池
    1. 减少线程的创建和销毁从而节省内存资源
    2. 线程池是由核心线程、工作队列、临时线程以及拒绝执行处理器组成
    3. Callable和Runnalbe区别:返回值、异常、启动方式
4. Lock
    1. 比synchronized要更加的灵活和精细
    2. 默认是非公平策略,可以手动设置为公平
    3. CountDownLatch:线程递减锁/闭锁。当所有的线程都执行到同一节点之后进行统一处理
    4 . CyclicBarrier:栅栏。所有的线程到达同一节点之后再分别往下继续执行。
5. Exchanger:交换机。用于交换两个线程的信息
6. Semaphore:信号量。每一个线程取得一个信号,当信号被用完之后,其他线程只能被阻塞,只有当线
    程释放信号的时候,被阻塞的线程才能取得信号继续执行。
原子性操作
    在对象的底层进行加锁,保证对象在同一时刻只能被一个线程操作。
回顾:内存
java将内存大致分为5块:栈内存、堆内存、方法区、本地方法栈、PC计数器(寄存器)。
栈内存:计算。所有的方法以及代码块的执行都是在栈内存中。每一个线程独享一个栈。
堆内存:存储对象。
方法区:存储类信息,常量(字面量、自定义常量)。
本地方法栈:计算。所有的本地方法(native)的执行都在本地方法栈。
PC计数器:程序的计数和线程的调度。
NIO
BIO - Blocking IO - 同步式阻塞式IO
BIO的缺点
1. 如果有大量的请求访问服务器,那么就要产生大量的线程去应对这些请求,导致服务器资源过于紧张
2. 在完成一次任务的过程中需要创建大量的输入或者输出流
3. 数据通过流传输,无法实现定点操作
4. 阻塞模式
NIO - New IO - 同步式非阻塞式IO:Buffer,Channel, Selector --- Buffer是容器,用于存储数据;Channel用
于传输;Selector进行过滤。
Buffer - 缓冲区
用于进行数据的存储,存储的时候都是用的数组。操作的都是基本类型。
数据在操作的时候是根据操作位position的位置决定。
限制位limit是决定操作位所能达到的最大值
标记位mark用于进行位置的标记,在出现错误的时候可以回到标记位进行重新操作,可以不用重复操作前边的数

容量位capacity用于固定容量
标记位 <= 操作位 <= 限制位 <= 容量位
翻转缓冲区:将限制位挪到操作位上,将操作位归零,清除标记位
重置缓冲区:将操作位挪到标记位
重绕缓冲区:将操作位归零,清除标记位
清空缓冲区:并不是将缓冲区真正清空,只是将操作位归零,将限制位挪到容量位,将标记位清除
Channel - 通道
传输数据,基于缓冲区进行传输。可以进行双向传输。
默认是阻塞的,可以设置为非阻塞。但是往往需要进行手动阻塞
tcp : SocketChannel , ServerSocketChannel
UDP : DatagramChannel
File : FileChannel
Selector - 多路复用通道选择器
可以选择出有用的事件或者是连接,进行事件的处理。
客户端的事件:可连接、可读、可写
服务器端的事件:可接受、可读、可写
Tomcat5:使用的是传统的BIO
tomcat6:使用NIO
aiO - Asynchronous IO - 异步式非阻塞式IO - JDK1.8 - 在NIO的基础上延伸出来的,所以称之为NIO.2

--结束END--

本文标题: day2 Java NIO

本文链接: https://lsjlt.com/news/231329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • day2 Java NIO
    复习1. BlockingQueue:阻塞式队列,使用的时候需要指定容量,而且容量指定之后不可改变。    1. ArrayBlockingQueue:基于数组进行存储。  &nb...
    99+
    2023-06-02
  • [GFCTF 2021] day2
    Baby_Web 查看源码发现 然后抓包看中间件,Apache/2.4.49 (Unix) 存在目录穿越漏洞 curl http://node4.anna.nssctf.cn:28805/cgi-bin/.%2e/.%2e/.%2e/.%...
    99+
    2023-09-22
    php 开发语言
  • Python-基础-day2
    Python环境的安装                                                                               安装Python: windows:           ...
    99+
    2023-01-30
    基础 Python
  • python笔记day2
    作用域只要内存中存在就可以使用,在有函数栈的情况下,还需要加一个条件。name = {'name1':'Carrick','name2','Tina'}for item in name:  print item  -->仅仅是打印,没...
    99+
    2023-01-31
    笔记 python
  • Java的NIO是什么
    Java提供了一个叫作NIO(New I/O)的第二个I/O系统,NIO提供了与标准I/O API不同的I/O处理方式。它是Java用来替代传统I/O API(自Java 1.4以来)。 (推荐学习:java课程)它支持...
    99+
    2018-06-12
    java教程 Java
  • Java NIO 中 Selector 解析
    目录一、Selector 简介1、Selector 和 Channel 关系2、可选择通道(SelectableChannel)3、Channel 注册到 Selector4、选择键...
    99+
    2024-04-02
  • Java Buffer缓冲区(NIO)
    目录Java NIO(Buffer)1.1 Buffer 简介1.2 Buffer 的基本用法1、使用 Buffer 读写数据,一般遵循以下四个步骤:2、使用 ByteBuffer的...
    99+
    2024-04-02
  • Java NIO API有哪些
    小编给大家分享一下Java NIO API有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!NIO API主要集中在java.nio和它的subpackages...
    99+
    2023-06-17
  • Java NIO深入分析
    以下我们系统通过原理,过程等方便给大家深入的简介了Java NIO的函数机制以及用法等,学习下吧。前言本篇主要讲解Java中的IO机制分为两块:第一块讲解多线程下的IO机制第二块讲解如何在IO机制下优化CPU资源的浪费(New IO)Ech...
    99+
    2023-05-30
    java nio ava
  • Java NIO Channel 使用详情
    目录FileChannel输入 FileInputStream输出 FileOutputStreamRandomAccessFile两个 SocketChannelServerSoc...
    99+
    2024-04-02
  • java中是什么是NIO
    java中是什么是NIO?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了...
    99+
    2023-06-14
  • Java NIO的详细介绍
    这篇文章主要讲解了“Java NIO的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java NIO的详细介绍”吧!首先,我们需要弄清楚几个概念:同步和异步,阻塞和非阻塞。同步和异步...
    99+
    2023-06-16
  • Java NIO代码怎么写
    这篇文章主要讲解了“Java NIO代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java NIO代码怎么写”吧!Java代码:import java.io.IOExce...
    99+
    2023-06-17
  • Java NIO中Selector是什么
    这篇文章将为大家详细讲解有关Java NIO中Selector是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Selector 简介1、Selector 和 Channel 关系Sele...
    99+
    2023-06-29
  • Python开发基础-day2
    一.python列表list是处理和存放一组数据的列表    用法:    acclist.index()   调出list中内容位置    acclist.insert()  (要插入的位置,插入的内容)  list插入内容    acc...
    99+
    2023-01-31
    基础 Python
  • Python学习记录day2
    今天,跟着Alex喝了心灵的鸡汤:Be a new gentlmen着装得体每天洗澡适当用香水女士优先不随地吐痰、不乱扔垃圾、不在人群中抽烟不大声喧哗不插队、碰到别人要说抱歉不在地铁上吃东西尊重别人的职业和劳动尊重别人隐私,不随便打听别人工...
    99+
    2023-01-31
    Python
  • 常见JAVA中IO/NIO模型
    我们常见的IO模型有:阻塞 IO 模型、非阻塞 IO 模型、多路复用 IO 模型、 信号驱动 IO 模型、异步 IO 模型;下面我们就简单介绍一下以上IO模型。1、阻塞 IO 模型最传统的一种IO 模型,即在读写数据过程中会发生阻塞现象。当...
    99+
    2018-06-10
    java教程 JAVA
  • Java中NIO的示例分析
    这篇文章主要介绍了Java中NIO的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Java思维导图二、I/O模型I/O模型的本质是用什么样的通道进行数据的发送和接...
    99+
    2023-06-29
  • Java中BIO、NIO、AIO的理解
    在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞...
    99+
    2023-05-30
    java bio nio
  • Java NIO实现聊天功能
    本文实例为大家分享了Java NIO实现聊天功能的具体代码,供大家参考,具体内容如下 server code :  package com.tch.test.nio; imp...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作