并发
啦啦啦咯咯咯
一个默默学习的小程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
公平锁和,公平锁,可重入锁(递归锁),自旋锁,读写锁
自旋锁 手写自旋锁 运行结果: 独占锁,共享锁 ReentrantReadWriteLock读写锁。 例子(未加读写锁): 结果,写操作应该为独占,不许被分割。 解决:加上ReentrantReadWriteLock 写操作加上一个写锁 读操作加上一个读锁: 结果: ...原创 2021-01-05 16:27:48 · 340 阅读 · 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 · 227 阅读 · 0 评论 -
原子类Atomic的ABA问题
ABA问题解决: 原始: 解决: atomicStampedReference,带版本号的原创 2021-01-05 15:23:58 · 262 阅读 · 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 · 333 阅读 · 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 · 119 阅读 · 0 评论
分享