并发编程
文章平均质量分 84
六色凉橙
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap jdk1.8源码讲解
先了解Hash表例如:ThreadLocal->hash表1、hash函数->MD5/SHA2、通过hash函数来计算数据位置的数据结构3、数组[]存在hash冲突问题多个不同的key通过hash函数运算之后落到同一个是数组下标的位置解决方案:1、线性探索(开放寻址法),ThreadLocal运用线性探索解决2、链式地址法 ,hashMap中运用到的3、再hash法(通过多个hash函数)->布隆过滤器4、建立公共溢出区jdk1.7->1.8hashTabl原创 2020-05-31 22:55:51 · 232 阅读 · 0 评论 -
并发编程之condition的使用以及原理解析
abstractQueuedSynchronizerCAS (原子性、可见性、有序性)1、加入volatile保证可见性2、cas()保证原子性:Atomic来保证原子性,在内部会调用缓存锁3.缓存锁(MESI、总线锁)多个线程并行访问内存的更改Condition条件控制await调用await方法将线程放入到Condition队列中 public final void await() throws InterruptedException { if (Thread原创 2020-05-29 23:09:04 · 284 阅读 · 0 评论 -
java并发包java.util.Concurrent之ReentrantLock.lock源码分析
lock锁在源码中是怎么设计的?1)、首先要有互斥的条件,通过一个volatile修饰的变量来标记锁是否被占用 volatile state (0无锁,1有锁,>1 重入锁)2)、当线程抢占失败时,要进行等待和唤醒,释放CPU时间片资源3)、等待队列资源的存储(通过数据结构存储)4)、可重入特性(通过线程的ThreadId来判读是否为当前线程)5)、公平非公平(能否插队)从源码中分析:互斥的条件...原创 2020-05-26 00:13:09 · 127 阅读 · 0 评论