摘要:NIO 非阻塞编程: 核心组件: buffer 缓冲区 可写入读取数据的内存块 buffer.filp()转换读取模式 channel 通道 Selector 选择器 buffer:capacity容量(申请的大小),position位置(当前指向位置,读写切换时会归零),limit限制(写入的大小
阅读全文
摘要:ServerSocket类 serversocket.accept() InputStream(它是阻塞的) 输入 Socket类 OutputStream(它是阻塞的) 输出 ServerSocket 单线程 一次连接处理完才会处理下一个 http请求是可以访问到SocketServer的 htt
阅读全文
摘要:OSI 7层模型: 物理层、数据链路层(软硬结合,确认校验重发等手段)、网络层(路由选择,流量控制 ip协议) 低3层 传输层:端口到端口的数据传输服务(TCP/UDP协议) 会话层(建立管理终止进程会话和数据交换)、表示层(格式转换,加密解密)、应用层 高3层。 高三层可以当做一个应用层即可(ht
阅读全文
摘要:semaphore: 计数信号量,理解为控制并发量的共享锁。指定信道数,同时支持多少个线程并发。 acquire()获取 release() 释放 CountDownLatch: cdl.await()阻塞 cdl.countDown()减1 先阻塞 后减一 可以模拟出 多线程同时执行的效果 Cyc
阅读全文
摘要:arraylist: 底层object数组, ensureCapcityInternal 判断是否数组扩容 copyonwritearraylist: copyonwrite机制: 当进行资源写入时,系统生成资源副本进行修改。保证写入原子性。写入加锁 hashset: 底层实现:hashmap K+
阅读全文
摘要:HashMap: jdk1.7 底层存储 entry数组 查询使用hash表算法 h&(lenght-1) 取模计算数组下标 下标相同,组成链表,顺序查找 k,v总数超过一定比例 引发数组扩容 负载因子*length 扩容方法 transfor 遍历全部元素 重新取模 放入数组 扩容中无法保证数据问
阅读全文
摘要:1、缓存雪崩、缓存击穿之类的问题。 2、锁降级的情况。 写锁内部追加读锁(读写互斥的特例 ,必须同一个线程); 模板方法模式: 抽取公共代码。 jdk中使用链表实现队列。 普通队列使资源排队。 AQS使用追加的逻辑让线程排队 jdk AQS中只有一个int state 读写锁进行位操作 前2字节 后
阅读全文
摘要:Lock接口 lock() 没完没了的试 挂起 trylock() 一次不成就算了 trylock(time,timeunit) 超时后就算了 lockinterruptibly() 被动等通知 可中断 newCondition 等待池。如果唤醒和挂起倒置 会死锁 reentrantL lock()
阅读全文
摘要:自旋锁:循环等待,不断尝试获取,成功后退出。 乐观锁: 修改数据时发现数据变化则重读数据并修改 假定不冲突 悲观锁:从读数据开始就加锁 -- 假定冲突 独占锁:一把用写,其他线程不能加锁。 共享锁:读,可以加读锁,但不能加写锁。 (不)可重入锁:已经获取锁的线程未释放前重新获取锁,是否阻塞。reen
阅读全文
摘要:1、i++javap后的指令码,分别为操作数栈内 堆内存取i, 存入常量1,执行加法,写回堆内存多步操作。非原子性,会有线程问题。 处理办法,加锁(synchronize,ReentrantLock)或者atomicInteger。 或者使用cas(compare and swap)操作(-硬件同步
阅读全文