并发编程
文章平均质量分 56
知易行难-坚持
这个作者很懒,什么都没留下…
展开
-
unsafe.compareAndSwapInt aqs
U.compareAndSwapInt(this, CELLSBUSY, 0, 1)this 表示当前对象 CELLSBUSY 偏移量内存地址 0 期望值, 1 更新值CELLSBUSY = U.objectFieldOffsetk.getDeclaredField("cellsBusy"));如果 cellsBusy==0 就把内存地址的值改为1 只有一个线程能进入.此方法是Java的native方法,并不由Java语言实现。方法的作用是,读取传入对象this在内存中偏移量为CEL...原创 2021-09-18 17:39:13 · 394 阅读 · 0 评论 -
ConcurrentHashMap
JDK1.8的实现降低锁的粒度,JDK1.7版本锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry(首节点) JDK1.8版本的数据结构变得更加简单,使得操作也更加清晰流畅,因为已经使用synchronized来进行同步,所以不需要分段锁的概念,也就不需要Segment这种数据结构了,由于粒度的降低,实现的复杂度也增加了 JDK1.8使用红黑树来优化链表,基于长度很长的链表的遍历是一个很漫长的过程,而红黑树的遍历效率是很快的,代替..原创 2021-09-16 15:03:37 · 69 阅读 · 0 评论 -
并发工具CountDownLatch SemaphoreCyclicBarrier
20210913:并发工具CountDownLatch:计数器工具:await countDown它可以让一个线程阻塞,也可以让多个线程阻塞.共享锁的实现。 可以允许多个线程同时抢占到锁,然后等到计数器归零的时候,同时唤醒.state记录计数器. countDown的时候,实际上就是 state-- Semaphore:信号灯.限流器,限制资源的访问.本质上: 抢占一个令牌. -> 如果抢占到令牌,就通行, 否则,就阻塞!acquire() 抢占一个令牌release() 释...原创 2021-09-14 09:03:45 · 66 阅读 · 0 评论 -
Java并发编程 cpu volatile
volatile解决的多线程下的可见性问题,用到了内存屏障 缓存锁原创 2021-09-09 09:59:29 · 96 阅读 · 0 评论 -
Thread
sleep 与 wait 的区别sleep 不释放锁 wait 释放锁wait 必须搭配synchronized 关键字使用(如果不搭配会Lost Wake-Up Problem,唤醒丢失的问题) sleep 不需要进入wait状态下的线程能被 notify(随机唤醒一个) notifyAll唤醒 sleep不行怎么证明sleep 不释放锁,wait释放锁public static void main(String[] args) throws InterruptedEx...原创 2021-08-05 11:35:53 · 96 阅读 · 0 评论