Java并发包 | 您所在的位置:网站首页 › 并发包有哪些 › Java并发包 |
Java并发包
JDK核心库包并发包java.util.concurrent(JUC)什么是锁并发原子类java.util.atomic并发工具类AQSSemaphore - 信号量CountdownLatchCyclicBarrier 屏障
Future/FutureTask/CompletableFuture
JDK核心库包
atomic原子操作 locks锁 Lock本身 ReadWriteLock读写锁 Condition条件 为什么需要显示的Lock synchronized 可以加锁, wait/notify 可以看做加锁和解锁 为什么需要一个显示的锁 1.synchronized 块锁不灵活(灵活的锁是在什么条件下锁住什么条件下释放) 2 synchronized 锁住的时间,只有锁被占用就必须要等待 可重入锁 第二次进入时是否阻塞 公平锁 –公平锁意味着排队靠前的优先 –非公平锁则是都是相同的机会
ReadWriteLock管理一组锁,一个读锁,一个写锁。 读锁可以在没有写锁的时候被多个线程同时持有,写锁独占。 所有读写锁的实现必须确保写操作对读操作的内存影响。每次只能有一个写线程,但是同时可以有多个线程并发的读数据。 ReadWriteLock适用于读多写少的并发情况
锁是局部的 不能暴露出去。 并发原子类java.util.atomic
例如银行取出5 现在花掉2元 ,5-2后将3再重新写入数据库。 悲观锁:取出5锁住,不让别人更新,当自己跟新完成后解锁selectforupdate 乐观锁:当发现数据库被改动,更新失败,更旧值作比较为乐观锁cas。可以通过乐观锁的自旋来比较最后插入 核心实现原理: 1volatile保证读写操作都可见(注意不保证原子性) 2使用CAS指定,作为乐观锁实现,通过自旋重试保证写入
AbstractQueuedSychronizer,即队列同步器。他是构建锁或者其他同步组件的基础 (例如:Semaphore,CountDownLatch,ReentrantLock,ReentrantReadWriteLock) 是JUC并发包中的核心基础组件。 解决的问题 多线程抢占锁,怎样阻塞线程管理好,线程之间怎样共享状态和资源 资源本身的状态有两种 1 独占 如写操作 2 共享 如读操作 Semaphore - 信号量
可以看作式对线程的计数器,所有线程完成任务状态的聚合点 和 CountdownLatch 相似 CyclicBarrier 是等待大家都变成某个状态
|
CopyRight 2018-2019 实验室设备网 版权所有 |