java.util.concurrent包简要笔记
- java.util.concurrent.locks.Lock
- void lock() :获取这个锁,如果这个锁被其他线程所有,则阻塞
- void unlock():释放这个锁
- java.util.concurrent.locks.ReentrantLock
- ReentrantLock():构建一个可重入锁
- ReentrantLock(Boolean fair):构建一个带公平策略的锁(偏爱调度等待时间最长的线程)
- java.util.concurrent.locks.Condition
- void await():将该线程放到条件的等待集合中
- void signal():从该条件的等待集合中随机的选择一个线程,解除其阻塞状态
- void signal():解除该条件集合上的所有阻塞线程
- synchronized关键字: Object的内部锁提供了对该关键字的支持,可以用来同步对象和方法,以及类的field(同步阻塞)
严格来讲,锁和条件不是面向对象的。一个成功的解决方案是:monitor
- Volatile : 为实例域的同步访问提供了一种免锁机制
- 为什么同步:多处理器上的计算机能够暂时在寄存器或者本地内存缓存中保存内存中的值,结果导致不同处理器从同一内存出获得不同的值;编译器可能为了吞吐量最大化改变了指令的执行顺序,虽然代码语义没变,有可能导致程序实际执行时的错误(另外一个线程改变了内存的值,违反了编译器的假设)。
- 域的并发访问有3中解决方案:域是final的,并且在构造函数执行后被访问;对域的访问有共有的锁来保护;域是volatile的
- java.util.concurrent.locks.ReentrantReadWriteLock
- 使用于读写者问题
- ReentrantReadWriteLock():获取所对象
- readLock() and writeLock():抽取读锁和写锁
- 读者加读锁,写着加写锁
-
- java.util.concurrent.atomic.AtomicBoolean (implements java.io.Serializable)
- java.util.concurrent.atomic.AtomicIntegerArray (implements java.io.Serializable)
- java.util.concurrent.atomic.AtomicIntegerFieldUpdater<T>
- java.util.concurrent.atomic.AtomicLongArray (implements java.io.Serializable)
- java.util.concurrent.atomic.AtomicLongFieldUpdater<T>
- java.util.concurrent.atomic.AtomicMarkableReference<V>
- java.util.concurrent.atomic.AtomicReference<V> (implements java.io.Serializable)
- java.util.concurrent.atomic.AtomicReferenceArray<E> (implements java.io.Serializable)
- java.util.concurrent.atomic.AtomicReferenceFieldUpdater<T,V>
- java.util.concurrent.atomic.AtomicStampedReference<V>
- java.lang.Number (implements java.io.Serializable)
- java.util.concurrent.atomic.AtomicInteger (implements java.io.Serializable)
- java.util.concurrent.atomic.AtomicLong (implements java.io.Serializable)
- 阻塞队列:
- java.util.concurrent.Deque
- java.util.concurrent.Queue
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。