![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NIO
jasonpengrui
to be better
展开
-
NIO之ByteBuffer
在NIO中用的最多的缓冲区就是ByteBuffer—字节缓冲区 其中有几个比较重要的 属性:limit(默认大小=容量大小),capacity(用于指定缓冲区的大小),position(位置指针会随着数据更改而变化),mark(为某一读过的位置做标记,便于某些时候回退到该位置)。 这些属性始终满足: 0<=mark<=position<=l...原创 2018-02-09 19:34:34 · 259 阅读 · 0 评论 -
NIO之锁
一、闭锁CountDownLatch:线程递减锁也叫闭锁。 当所有的锁都已经解开的时候,再进行下一步操作。一般的使用方法是将闭锁封装进一个线程对象中,通过构造方法传入某个线程对象中。然后线程成功执行一次,调用一次countDown()方法,闭锁减一。 它通过await方法来产生阻塞。创建闭锁: 创建一个闭锁,在创建的时候需要指定一个初始容量CountDownLatch cdl =...原创 2018-02-09 20:42:27 · 242 阅读 · 0 评论 -
并发之ConcurrentHashMap
常见的映射有HashMap,HashTable。 而HashMap是异步式线程不安全的映射,效率高,但是线程不安全。 HashTable呢,线程安全但是性能低。因为其中每个方法都加了同步代码块,在操作表的时候,会将整个表都锁起来。 所以引入了ConcurrentHashMap。它是一个异步式线程安全的映射。在它身上引入一个分段锁的机制,将整个表分为了16段,即16个segment,理论上的并...原创 2018-02-09 21:42:18 · 268 阅读 · 0 评论 -
BIO和NIO
BIO:阻塞式IO,这种通信模型其实就是socket。 它是通过以流的形式进行输入和输出。 该模型中有四个方法,accept()、connect()、read()、write()这些方法都会产生阻塞。因为是阻塞通信,所以这种模型相当于是一个请求产生一个线程,当请求数量越多时,线程数量越多,由此会带来内存占用,内存碎片,cpu对线程的管理调度等问题。当环境处于高并发,高访问量时,...原创 2018-02-09 15:36:26 · 214 阅读 · 0 评论 -
NIO之FileChannel
文件通道能够根据位置指针去操作文件,比基于流的形式更灵活。 创建文件通道是基于某个流来创建的,比如基于文件输入流或者文件输出流。 文件输入流获取的通道只能进行读,文件输出流得到的文件通道只能进行写。如果读的通道进行写会报错 如果想获取即可以读,又可以写的文件通道,可以通过RandomAccessFile(file,rw)来实现 文件通道的transferTo()方法底层用到了zero cop原创 2018-02-09 17:33:31 · 226 阅读 · 0 评论