java并發包常用類,java juc 包_JUC java并發包

 2023-10-15 阅读 29 评论 0

摘要:1. JUC 簡介在 Java 5.0 提供了java.util.concurrent(簡稱JUC)包,在此包中增加了在并發編程中很常用的工具類,用于定義類似于線程的自定義子系統,包括線程池,異步 IO 和輕量級任務框架;還提供了設計用于多線程上下文中java并發包常用類,的 Collection 實現等;JUC包JUC提供的一

1. JUC 簡介

在 Java 5.0 提供了java.util.concurrent(簡稱JUC)包,在此包中增加了在并發編程中很常用的工具類,

用于定義類似于線程的自定義子系統,包括線程池,異步 IO 和輕量級任務框架;還提供了設計用于多線程上下文中

java并發包常用類,的 Collection 實現等;

906d30b478df

JUC包JUC提供的一些實現:

Atomic : AtomicInteger? 原子操作類

Locks : Lock, Condition, ReadWriteLock? 可重入讀寫鎖

juc并發工具、Collections : Queue, ConcurrentMap 并發集合

Executer : Future, Callable, Executor 線程執行池,異步Future等

Tools : CountDownLatch, CyclicBarrier, Semaphore 減數器,等待器,信號量

2.JUC 核心

java打包成jar包,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

ucc,獨占鎖:https://www.jianshu.com/p/71449a7d01af

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/137750.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息