線程三線程安全
對於多線程的系統來說,如果不加以限制的話,會造成數據安全等問題,對於數據安全問題會有如下問題:
1、讀取髒數據 在讀取數據的時候,數據被修改了,而程序讀取的是修改過的或者沒有修改過的,反正不是自己期望讀取的數據的值。
2、數據不一致 在使用多線程進行數據處理的時候,最終得出來的數據每一次執行都不一樣。
3、數據錯亂 在數據的打印或者數組中,會造成數據的順序錯亂,對於關係可能會錯亂。
……
對於數據的安全性,java提供了一些解決的方法:
1、使用synchronized同步關鍵字
2、使用volatile關鍵字
3、使用原子類型:原子就是要麼全部成功,要麼全部失敗
(1)AtomicInteger整型原子類型
方法講解:
incrementAndGet();先自增在返回
decrementAndGet();先自減在返回
getAndIncrement();先返回在自增
getAndDecrement();先返回在自減
addAndGet(num);先加num在返回
getAndAdd(num);先返回在加num
(2)AtomicBoolean布爾類型的原子類型
getAndSet(Boolean b);先獲取在設置b值
(3)AtomicLong長類型的原子類型
incrementAndGet();先自增在返回
decrementAndGet();先自減在返回
getAndIncrement();先返回在自增
getAndDecrement();先返回在自減
addAndGet(num);先加num在返回
getAndAdd(num);先返回在加num
(4)AtomicIntegerArray 原子類型的整型數組
(5)AtomicLongArray 原子類型的長整型數組
原子數組操作:
set(seat,value);設置值
getAndAdd(seat, value);將seat值返回在加上value
getAndIncrement(seat);將seat值返回在自增1
4、線程安全的容器ConcurrentMap,ConcurrentHashMap等等。
……
在考慮線程的數據安全性後,還要考慮系統是否會造成死鎖的,飢餓等問題。
死鎖:就是在兩種以上不同的線程中,同時都佔用了一個資源,但是還差一個資源就可以完成任務,但是差的那個已經被別的線程佔有,又不想釋放自己佔有的資源,這樣,線程一直在等待資源,造成線程死鎖。
飢餓:就是在考慮的線程優先級的時候,低優先級的線程一直不能得到執行完成而造成的現象稱爲飢餓。
簡單代碼:
AtomicIntegerArray aia = new AtomicIntegerArray(10);
for(int i=0;i<10;i++) {
aia.set(i, i+1);
}
aia.getAndAdd(9, 10);
aia.getAndIncrement(8);
for(int i=0; i<10;i++) {
System.out.println(aia.get(i));
}
線程三線程安全
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Java项目面试实操 提升大厂面试成功率
wy53780
2020-04-23 14:14:04
玩转算法系列--图论精讲 面试升职必备(Java版)
wy53780
2020-04-23 14:03:23
玩转Java并发工具,精通JUC,成为并发多面手
wy53780
2020-04-23 13:56:08
线程八大核心+Java并发底层原理精讲(Java并发核心知识体系精讲)
wy53780
2020-04-23 13:55:55
Java通用型支付+电商平台双系统实战
wy53780
2020-04-23 13:54:42
【躍遷之路】【734天】程序員高效學習方法論探索系列(實驗階段491-2019.2.24)
Wall_Breaker
2019-02-24 23:25:10
Java是怎麼運行的?
勤思
2019-02-24 22:52:36
sql語法、關係建模
死瘦宅
2019-02-24 22:35:22
MySQL 事務、函數、觸發器、數據庫備份、權限管理
死瘦宅
2019-02-24 22:35:12
Python與家國天下
豌豆花下貓
2019-02-24 22:22:40
Java面試 | 002
Java貓說
2019-02-24 21:05:12
《從0到1學習Flink》—— Flink 讀取 Kafka 數據批量寫入到 MySQL
zhisheng
2019-02-24 21:04:11
Redis | 001能做什麼?
Java貓說
2019-02-24 21:03:51
java中具有繼承關係的類及其對象初始化順序
Linus脫襪子
2019-02-24 19:55:05
24小時熱門文章
-
使用c#強大的表達式樹實現對象的深克隆之解決循環引用的問題
-
GPT-4o 引領人機交互新風向,向量數據庫賽道沸騰了
-
free AI online tools All In One
-
痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啓動那些事(12.A)- uSDHC eMMC啓動時間(RT1170)
-
基於Ubuntu-22.04安裝K8s-v1.28.2實驗(二)使用kube-vip實現集羣VIP訪問
-
企業大模型如何成爲自己數據的“百科全書”?
-
本地SSL證書過期 輸入命令在IIS自動生成
-
.NET週刊【5月第2期 2024-05-12】
-
基於Ubuntu-22.04安裝K8s-v1.28.2實驗(一)部署K8s
-
基於Ubuntu-22.04安裝K8s-v1.28.2實驗(三)數據卷掛載NFS(網絡文件系統)