并发
啦啦啦咯咯咯
一个默默学习的小程序员
展开
-
公平锁和,公平锁,可重入锁(递归锁),自旋锁,读写锁
自旋锁手写自旋锁运行结果:独占锁,共享锁ReentrantReadWriteLock读写锁。例子(未加读写锁):结果,写操作应该为独占,不许被分割。解决:加上ReentrantReadWriteLock写操作加上一个写锁读操作加上一个读锁:结果:...原创 2021-01-05 16:27:48 · 270 阅读 · 0 评论 -
原子类CAS理解
CAS一句话:compareAndSet就是并交换。Demo:结果:UnSafe类点进源码,发现有个unsafe类。unsafe类在rt,jar 里面的原生类。原理每个线程取一开始的值5到自己的工作线程,线程1写回主内存的时候,看主内存是否还是5,是的话就修改为2019,而线程2的话,先要写回主内存,发现主内存的值并非是5,导致失败。理解前提JMM:多线程CAS理解:总结缺点:1.cpu开销大2.只能保证一个共享变量的原子操作3.ABA问题原创 2021-01-05 16:03:57 · 170 阅读 · 0 评论 -
原子类Atomic的ABA问题
ABA问题解决:原始:解决:atomicStampedReference,带版本号的原创 2021-01-05 15:23:58 · 182 阅读 · 0 评论 -
Synchronized和Lock的区别?
一 原始构成二 使用方法三 等待是否可中断四 加锁是否公平五 锁绑定多个条件condition代码:精确通知:public class ShareResource { private int number = 1; //a:1 b:2 c:3 private Lock lock = new ReentrantLock(); private Condition condition1 = lock.newCondition(); private C原创 2020-12-30 10:34:18 · 230 阅读 · 1 评论 -
多线程生产者消费者模式
前提知识synchronized 使用wait等待线程,notify唤醒线程lock使用Condition condition = lock.newCondition();condition中的await等待线程,signal唤醒线程。上代码:public class ShareDate { private int number = 0; private Lock lock = new ReentrantLock(); private Condition conditi原创 2020-12-30 09:39:27 · 73 阅读 · 0 评论