java juc 包_JUC java并发包

1. JUC 简介

在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,

用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中

的 Collection 实现等;

906d30b478df

JUC包JUC提供的一些实现:

Atomic : AtomicInteger  原子操作类

Locks : Lock, Condition, ReadWriteLock  可重入读写锁

Collections : Queue, ConcurrentMap 并发集合

Executer : Future, Callable, Executor 线程执行池,异步Future等

Tools : CountDownLatch, CyclicBarrier, Semaphore 减数器,等待器,信号量

2.JUC 核心

java提供了synchonized关键字实现悲观锁机制,以求指令原子性,内存可见性,操作互斥性

但是synchonized锁机制会导致性能下降,控制的颗粒度也粗,所以JUC的核心理念是不通过重量级的synchonized来解决并发问题

我个人理解的JUC三大核心是 :1.volatile 关键字保证内存可见性;

2.CAS(Compare-And-Swap) 算法 保证数据的原子性;

3.AQS队列   (Unsafe类的park操作是调用Posix的信号量互斥量 condition,mutex那套来实现)

AQS的内部队列采用的是CLH队列锁模型,CLH队列是由一个一个结点(Node)构成的。Node类中有两个常量SHARE和EXCLUSIVE,顾名思义这两个常量用于表示这个结点支持共享模式还是独占模式,共享模式指的是允许多个线程获取同一个锁而且可能获取成功,独占模式指的是一个锁如果被一个线程持有,其他线程必须等待。多个线程读取一个文件可以采用共享模式,而当有一个线程在写文件时不会允许另一个线程写这个文件,这就是独占模式的应用场景。

906d30b478df

找的一张AQS队列

JUC的各种功能都是通过实现自定义sync类继承AQS(AbstractQueuedSynchronizer)类,sync有公平锁,非公平锁;也可以区分为独占sync,共享sync。AQS源码一半好懂一半晦涩,比如 do{ node.prev = pred = pred.prev; }while(pred.waitStatus >0); 这一段,我也有过空指针疑问,还有比如,为什么要倒序唤醒等等,所以我附上一份个人觉得比较好的AQS源码解读:共享锁:https://www.jianshu.com/p/1161d33fc1d0

独占锁:https://www.jianshu.com/p/71449a7d01af

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值