The All-in-One Note (11)

// take, poll, peek 等读操作的方法需要获取到这个锁 private final ReentrantLock takeLock = new ReentrantLock(); // 如果读操作的时候队列是空的,那么等待 notEmpty 条件 private final Condition notEmpty = takeLock.newCondition(); // put, offer 等写操作的方法需要获取到这个锁 private final ReentrantLock putLock = new ReentrantLock(); // 如果写操作的时候队列是满的,那么等待 notFull 条件 private final Condition notFull = putLock.newCondition();

PriorityBlockingQueue

数据结构

线程安全性

实现

ReentrantLock

特点

自动扩容

SynchronousQueue

特点

没有存储,读直接交给写,写直接交给读

TransferStack

TransferQueue(默认 非公平模式)

TreeSet

应用场景

自动排序

线程安全性

不安全

线程安全的替代

CopyOnWriteArraySet

ConcurrentSkipListSet

重写equals

四大原则,自反性,对称性,传递性,一致性,非空性

如果继承一个类,并且新增了值属性,重写equals会变得很麻烦,这时候推荐用组合

如果重写了equals但是没有重写hashcode有可能出现equals返回true但是hashcode不相等的情况

异常处理一般规范

在Finally块中清理资源或者使用Try-With-Resource语句

抛出明确的异常,避免抛出Exception这种

在注释Javadoc里边添加@throws声明并且描述什么样的情况会导致异常

将异常与它的描述信息一并抛出

优先catch捕获更明确的异常

不要捕获Throwable

别忽略异常

不要打印异常日志的同时将其抛出

自定义异常包裹某个异常的同时不要丢弃它原本的信息

BIO,NIO,AIO的区别

BIO

基于字节流(InputStream,OutputStream),字符流(Reader,Writer)

同步阻塞I/O操作

一个连接对应一个线程

NIO(>jdk4)

多路复用,同步非阻塞I/O操作

增加了Channel,Buffer,Selector等组件

多个连接对应一个线程

AIO(>jdk7)

异步非阻塞I/O操作

基于事件和回调机制

请求立即返回,连接和线程无对应关系

Java泛型参数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyysp.html