文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州
▲ 本章节目的
⚪ 了解高并发的技术NIO、JUC;
⚪ 了解高并发的Java技术ConcurrentMap、ExecutorService;
一、NIO
1. 概述
1.1. 作用:传输数据
1.2. 概念回顾
a. 同步:一个对象或者一段逻辑在同一时间只能被一个线程使用。
b. 异步:一个对象或者一段逻辑在同一个时间段内允许被多个线程使用。
c. 阻塞:当线程没有获取到结果之前,那么这个线程就会持续等待而不会继续往下执行也不会报错。
d. 非阻塞:当线程没有获取到结果的时候,不会等待而是继续往下执行或者直接报错。
1.3. IO的分类
a. BIO-BlockingIO-同步阻塞式IO-JDK1.0。
b. NIO-NewIO-NonBlockingIO-同步非阻塞IO-JDK1.4。
c. AIO-AsynchronousIO-异步非阻塞式IO-JDK1.7,AIO相当于NIO的升级版,在NIO的基础之上增加了异步的特 性,在AIO出现之前,市面上已经有了针对于NIO相关的框架,也解决了异步的问题。本质上可以看成是NIO.2。
2. BIO的缺点
2.1. 一对一连接:每当一个客户端想要去发起连接,服务器端就要 产生一个线程去处理这个连接,那么服务器端就需要产 生大量的线程去处理这些请求,当服务器产生过多的线程的时候,就会导致服务端卡顿或者奔溃。
2.2. 无用的连接:如果客户端建立连接之后一直保持连接却不发生任何有用的操作,那么服务器端就会有大量的线程被占 用,如果有大量的无用连接,就会导致服务端的线程资源产生浪费。
2.3. 阻塞:一旦发生阻塞,整个程序执行时间就会很长,导致程序执行效率低。
3. NIO的三大组件:Buffer、channel、selector
3.1. buffer:存储数据。
3.2. buffer底层是依靠数组来存储数据的。并且之针对基本数据类型来存储数据。
3.3. buffer针对八种基本类型提供了7个实现类:ByteBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer, DoubleBuffer,CharBuffer。其中没有boolean类型的实现类,可以考虑通过其他的类型来代替boolean。例如可以 用0表示flase,用1表示true。此时就可以利用ByteBuffer来实现传输过程。
3.4. 考虑到计算机底层是通过字节的形式来实现数据的存储,在网络传输的时候,本质上也是通过字节的形式传输,所以说 字节的形式用的比较多,重点掌握ByteBuffer。
3.5. 重要位置:position<