说一下JUC和AQS

说一下JUC和AQS,第1张

说一下JUC和AQS

        JUC是java.util.concurrent包的缩写,见名知意concurrent中文译为同步执行的,意思就是并行,所以这个包中主要提供的就是并行处理的一些解决方案,并行处理的解决方案通常都是加锁,所以这个包下的的方法都是采用CAS方式进行加锁的。

        所谓CAS就是通过java底层的Unsafe类直接对内存进行 *** 作,CAS由三个参数构成:

        内存值V,旧的预期值A,要更新的值B。

        当V=A时才会将B修改并且返回true。

        以JDK1.8为例JUC下有两个子包atomic和locks,atmoic中主要定义了一些原子 *** 作的类,而locks中主要定义了基于AQS(AbstractQueuedSynchronzer)实现的加锁机制。

        AQS是一个抽象类,其类中定义了一系列方法,而所有的方法都是通过对state变量进行原子从 *** 作来进行锁的实现,其内维护了一个双向链表用作获取锁的队列。

        AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)。

        JUC包下还有其他关于原子 *** 作的类,以ConcurrentHashMap为例,当对其进行put时,如果未发生hash冲突都是采用CAS方式实现线程安全的,如果发生冲突需要采用synchronized进行加锁处理。

理解之上,写出想要说的话!

以上仅为个人拙见,写出来加深记忆,错误之处欢迎大神指正!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5076335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存