自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 JUC--010--locks6

前面已经说过了 ReentrantLock 的四种获取锁的方式,也说过了公平和非公平的区别。现在来看一下条件 Condition。 Condition 让锁的使用更加的灵活。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Condition 是一个接口, 有两个已知实现类:AbstractQueuedLongSynchronizer::ConditionObjectAbstractQu.

2021-03-04 16:34:46 124 1

原创 JUC--009--locks5

前面已经说了 ReentrantLock 使用 lock.lock() 方式获取锁,而且测试过这中获取锁的方式如果获取不到锁就会阻塞,而且无法通过线程中断的方式解除阻塞。如果使用线程中断试图解除阻塞,虽然不会成功,但是会把线程的状态改成已中断,这个可能会影响后续代码。同时也说了公平锁和非公平锁的区别。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~获取锁的四种方式: lock.lo.

2021-03-04 16:33:45 139 1

原创 JUC--008--locks4

上一篇:获取到锁的线程,在执行自己的代码, 没有获取锁的线程在使用 lock.lock() 获取锁的时候阻塞了。此时按照正常流程,获取锁的线程释放锁,看看会发生什么。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~lock.unlock(); public void unlock() { sync.release(1); } //AQ.

2021-03-04 16:32:31 129 1

原创 JUC--007--locks3

通过 CountDownLatch 来研究 AQS:前面已经说过 CountDownLatch 唤醒的两种方式:还有第三种:1: 正常唤醒, countDownLatch.countDown(); 让 倒计时的值达到02: interrupte, 通过线程打断的方式唤醒阻塞的线程。3: countDownLatch.await(timeout)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.

2021-03-04 16:31:32 112 1

原创 JUC--006--locks2

接着上篇调用 countDownLatch.await(); 的线程,创建了 Node, 并添加到 双向链表中。而且将自己的前置节点的状态设置成 SINGAL 状态,接着自己就阻塞在 unsafe.park 上。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~countDownLatch.countDown(); 的执行: //CountDownLatch::countDown.

2021-03-04 16:30:31 2592 1

原创 JUC--005--locks1

JDK 1.8.0_152 java.util.concurrent.locks 包下有:AbstractOwnableSynchronizerAbstractQueuedLongSynchronizerAbstractQueuedSynchronizerConditionLockLockSupportReadWriteLockReentrantLockReentrantReadWriteLockStampedLock~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.

2021-03-04 16:29:35 6385 1

原创 JUC--004--Atomic-4

DoubleAdder++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++前面说过了 LongAdder, 现在来看看 DoubleAdder。 因为也有浮点型累加的场景。看他定义:public class DoubleAdder extends Striped64 implements Serializable {...}立刻产生疑问了:Striped64 中没有 double 类型.

2021-03-04 16:27:21 2331 1

原创 JUC--003--Atomic-3

Striped64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++如果在多线程中原子的修改一个变量。 原子类使用的是自旋锁机制来保证修改成功的。比如在一个性能比较一般的机器上,开启20条线程使用原子类累加一个数据。机器性能一般所以cpu修改一个数据有点慢,结果就是 一个线程在修改数据,修改期间,其他19个线程在空转。原本机器性能就不好,现在更是雪上加霜。 都还不如使用同步代码块的方式累.

2021-03-04 16:25:42 200 1

原创 JUC--002--Atomic-2

AtomicReference++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++有一个对象变量,这个变量在多线程中频繁的被赋值。这个变量一会持有 A 的引用,一会又被改成持有 B 的引用。其实赋值操作原本就是原子的,一个变量的赋值总是最后一次赋值作为它的现值。那么这个类存在的意义又在哪里呢?个人感觉意义是 比较并赋值。 比如期望是 A 然后把它改成 B, 如果当前不是 A ,那么把他.

2021-03-04 16:24:09 169 1

原创 JUC--001--Atomic-1

AtomicBoolean++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++public class AtomicBoolean implements java.io.Serializable { private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long valueOf.

2021-03-04 16:19:12 876 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除