java高并发
文章平均质量分 76
明心_前进
这个作者很懒,什么都没留下…
展开
-
java并发之ConcurrentHashMap
我们之前了解了HashMap这一容器,但是这个容器并不是并发安全的,为了解决这个问题,JUC为我们提供了支持并发安全的HashMap,即ConcurrentHashMap。 和HashMap一样,ConcurrentHashMap也是有着默认值的,并且也是懒加载机制。默认长度为16,但是如果你在创建的时候有设置初始值,那么我们会创建比你的初始值大的2的幂次方的长度的ConcurrentHashMap。private final Node<K,V>[] initTable() { //默认初原创 2021-07-18 20:07:53 · 543 阅读 · 1 评论 -
java高并发之ReentrantLock
我们经常会遇到一个问题,就是lock和synchronized有什么区别?我们首先可以通过代码发现,lock是一个接口,而sychornized是一个修饰符public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws I原创 2021-07-16 22:22:22 · 102 阅读 · 0 评论 -
CAS理解
CAS 即 compare and swap,比较替换 CAS中主要用的有三个操作数:内存地址v,旧的预期值A,修改的新值B。 当我们更新一个变量的时候,只有当变量地址v的值是预期值A的时候,才会将内存地址v的对应值修改为B。但是我们使用CAS时会遇见ABA的问题即当我们想要修改的值在之前已经被改为了B,然后重新改为A,此时我们使用CAS是无法进行判断的。public static void main(String[] args) { final AtomicInteger a原创 2021-06-03 16:25:01 · 62 阅读 · 0 评论 -
聊聊synchronized锁
我们都知道sychronized关键字可以保证我们的并发安全,那么他具体是怎么实现的呢?当使用synchronized关键字修饰同步代码块的时候,我们锁的是配置对象当使用synchronized关键字修饰同步方法时,我们锁的是实例对象当使用synchronized关键字修饰静态同步方法时,我们锁的是类对象synchronized实现方法主要表现在锁对象的对象头中锁同步代码块中主要表现在 monitorentry和monitorexit语句中锁同步方法 ACC_SYNCHRONIZED原创 2021-06-03 16:30:20 · 84 阅读 · 0 评论 -
java并发之AQS
之前我们提到了CAS的原理和实现方式,但是CAS只能对一个变量进行原子操作,而我们实际的应用场景中的资源可不只是仅仅一个变量,还可以是资源对象。那么面对这样的场景时我们应该如何进行处理呢? java并发大师Doug Lea早就想到了这一问题,也为这个问题提出了解决的方案,就是我们大名鼎鼎的AQS(Abstract Queued Synchronizer)这其实是一个抽象类,即这是一个框架,里面很多具体的方法在我们需要使用的时候还需要重写。这里仅仅介绍几个类中的经典方法。 首先介绍的是抽象类中的几个原创 2021-07-16 16:25:11 · 120 阅读 · 0 评论