tmachc's notes

Stay Hungry, Stay Foolish.


  • 首页

  • 标签

  • 分类

  • 归档

J.U.C.锁机制 - 共享锁 & 读写锁

发表于 2016-05-10 | 分类于 java-multi-thread | 阅读次数:

JUC中的共享锁有CountDownLatch, CyclicBarrier, Semaphore, ReentrantReadWriteLock等
ReadWriteLock是读写锁。它维护了一对相关的锁-“读取锁”和“写入锁”,一个用于读取操作,另一个用于写入操作。

  • “读取锁”用于只读操作,它是“共享锁”,能同时被多个线程获取。
  • “写入锁”用于写入操作,它是“独占锁”,写入锁只能被一个线程锁获取。
    注意:不能同时存在读取锁和写入锁!
    ReadWriteLock是一个接口。ReentrantReadWriteLock是它的实现类,
    ReentrantReadWriteLock包括子类ReadLock和WriteLock。
阅读全文 »

J.U.C.锁机制 - Condition & LockSupport

发表于 2016-05-10 | 分类于 java-multi-thread | 阅读次数:

Condition

Condition的作用是对锁进行更精确的控制。
Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的notifyAll()方法。
不同的是,Object中的方法是和”同步锁”(synchronized)捆绑使用的;Condition需要与”互斥锁”/“共享锁”捆绑使用。

阅读全文 »

J.U.C.锁机制 - Reentrantlock

发表于 2016-05-10 | 分类于 java-multi-thread | 阅读次数:

ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。

ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,ReentrantLock锁可以被单个线程多次获取。
ReentrantLock分为“公平锁”和“非公平锁”。它们的区别体现在获取锁的机制上是否公平。“锁”是为了保护竞争资源,防止多个线程同时操作线程而出错,ReentrantLock在同一个时间点只能被一个线程获取;ReentraantLock是通过一个FIFO的等待队列来管理获取该锁所有线程的。在“公平锁”的机制下,线程依次排队获取锁;而“非公平锁”在锁是可获取状态时,不管自己是不是在队列的开头都会获取锁。

阅读全文 »

J.U.C.锁机制 - 框架

发表于 2016-05-09 | 分类于 java-multi-thread | 阅读次数:

相比同步锁,JUC包中的锁的功能更加强大,它为锁提供了一个框架,该框架允许更灵活地使用锁,只是它的用法更难。

JUC包中的锁,包括:Lock接口,ReadWriteLock接口,LockSupport阻塞原语,Condition条件,AbstractOwnableSynchronizer、AbstractQueuedSynchronizer、AbstractQueuedLongSynchronizer三个抽象类,ReentrantLock独占锁,ReentrantReadWriteLock读写锁。由于CountDownLatch,CyclicBarrier和Semaphore也是通过AQS来实现的;文中也将它们归纳到锁的框架中进行介绍。

阅读全文 »

J.U.C. 原子操作

发表于 2016-05-09 | 分类于 java-multi-thread | 阅读次数:

根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。

1.基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;
2.数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;
3.引用类型: AtomicReference, AtomicStampedRerence, AtomicMarkableReference ;
4.对象的属性修改类型: AtomicIntegerFieldUpdater, AtomicLongFieldUpdater, AtomicReferenceFieldUpdater 。

这些类存在的目的是对相应的数据进行原子操作。

原子操作的描述是:多个线程执行一个操作时,其中任何一个线程要么完全执行完此操作,要么没有执行此操作的任何步骤,那么这个操作就是原子的。

这些类主要都是使用CAS机制以及volatile关键字来保证操作原子性

阅读全文 »
1…3456
tmachc

tmachc

Just Do It.

27 日志
9 分类
28 标签
GitHub E-Mail
© 2015 — 2019 tmachc
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.2