**
JAVA8的ConcurrentHashMap
ConcurentHashMap数据结构类似hashmap但是其线程安全采用了Node锁即对每一个链表头结点加synchronized锁,减低锁的粒度,提高性能,并使用CAS(CompareAndSwap的缩写比较替换,缺点:循环时间长开销很大、只能保证一个共享变量的原子操作、ABA问题-先变为b再变为a。)操作来确保Node的一些操作的原子性,取代了锁。可能用ReentrantLock锁更好一点(手动加锁解锁更加灵活方便操作且易于实现公平锁在解决死锁上效果更好-限时等待、响应中断)
**
**
LinkedHashMap,TreeMap
LinkedHashMap可以保证迭代器读取时按照插入顺序读取,
TreeMap可以按照key大小排序(有个比较函数)
实现方式均通过一个内部链,TreeMap还用了插入排序
**
**
接口和抽象类的区别
1.接口内不能有构造函数抽象类可以
2.接口不能有静态方法抽象类可以
3.接口不能包含普通成员变量(静态可以)抽象类可以
4.接口可以多重实现继承,抽象类只能被继承一次
5.抽象类实现接口可以把接口中方法映射到抽象类中作为抽象方法而不必实现
**
**
继承、实现、依赖、关联和聚合
继承指的是一个类继承另外的一个类的功能,并可以增加它自己的新功能的能力
实现class类实现interface接口(可以是多个)的功能
依赖指一个类的方法有个参数为其他类
关联指一个类的成员变量为其他类
聚合一个类中有多个成员变量其他类组成了一个整体
**
**
BIO(同步阻塞)、伪异步阻塞、NIO(非阻塞IO)、AIO(异步IO)
BIO(同步阻塞)来一个请求创建一个线程
伪异步阻塞:当有新客户端接入时,将客户端的Socket封装成一个Task,投递到后端线程池中进行处理,线程池维护一个消息队列和N个活跃线程,对消息队列中的任务进行处理。由于线程池可以设置消息队列的大小和最大线程数,因此,资源是可控的,无论多少个客户端并发访问,也不会导致资源耗尽和宕机。但是可用线程都被故障服务器阻塞时,后续所有的IO消息都将在队列中排队,线程池采用阻塞队列实现,当队列积满后,后续入队的操作将被阻塞,前端只有一个Accept线程接收客户端接入,它被阻塞在线程池的同步阻塞队列之后,新的客户端请求将被拒绝,客户端会发生大量连接超时。
非阻塞IO(同步IO):有一个线程不断轮询,IO多路复用可同时监听多个描述符(socket),一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作,IO多路复用避免阻塞在IO上,原本为多线程来接收多个连接的消息变为单线程保存多个socket的状态后轮询处理。这种机制也叫做反应器模式(Reactor),Reactor负责响应IO事件(accept,read,send),当有新的事件时发送给对应handler处理但是由于单线程一读操作和写操作需要快否则在用户负载增加时,性能下降的非常快。
AIO:将线程需要处理的事情分成三类一类可以直接快速执行的、一类耗时的如IO操作还有就是需要在耗时IO操作后快速执行的,设计了回调函数模式
**