首页 > 代码库 > java.util.concurrent包简要笔记
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
java.util.concurrent包简要笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。