自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

竟然將線程安全講的如此清新脫俗,談談你對線程安全性的理解!

開發(fā) 前端
簡單來說,就是在多個線程環(huán)境下,訪問同一個對象時,如果不用考慮這些線程在運行時環(huán)境下的調度和交替執(zhí)行,在不做任何干預的強可選,調用這個對象的行為都可以獲得預期的結果,那么這個對象就是線程安全的。

1.官方定義

線程安全通常是相對于多線程或者并發(fā)的情況下而言的。如果是單線程操作的話,就無所謂線程安全了。

圖片

簡單來說,就是在多個線程環(huán)境下,訪問同一個對象時,如果不用考慮這些線程在運行時環(huán)境下的調度和交替執(zhí)行,在不做任何干預的強可選,調用這個對象的行為都可以獲得預期的結果,那么這個對象就是線程安全的。

看完這段,是不是還是很難理解?下面,我來分享一下看我是如何理解的。

2.Tom的理解

我認為,在多線程環(huán)境下保證線程安全,無非就是保證對對象訪問的原子性、有序性和多個線程之間的可見性。

圖片

原子性呢,說的是當一個線程執(zhí)行一系列程序指令操作的時候,它應該是不可中斷的,因為一旦出現(xiàn)中斷,站在多線程的視角來看,這一系列的程序指令會出現(xiàn)前后執(zhí)行結果不一致的問題。

這個和數(shù)據(jù)庫里面的原子性是一樣的,簡單來說就是一段程序只能由一個線程完整的執(zhí)行完成,而不能存在多個線程干擾。CPU的上下文切換 , 是導致出現(xiàn)多線程原子性問題的核心原因 , 而JDK面也提供了synchronized 關鍵字來解決原子性問題。

然后,就是可見性,相當于在多線程環(huán)境下,可能會存在讀和寫是發(fā)生在不同的線程里面,有可能出現(xiàn)某個線程對共享變量的修改,對其他線程不是實時可見的。導致可見性問題的原因有很多,比如 CPU的高速緩存、CPU的指令重排、編譯器的指令重排等因素。

最后,就是有序性,指的是程序編寫的指令順序和最終 CPU 運行的指令順序可能出現(xiàn)不一致的現(xiàn)象,這種現(xiàn)象也可以稱為指令重排序,所以有序性也會導致可見性問題。可見性和有序性可以通過JDK提供的volatile 關鍵字來解決。

我認為,導致有序性、原子性、可見性問題的本質,是計算機設計的時候,為了最大化提升 CPU 利用率導致的。比如CPU設計了三級緩存、設計了 StoreBuffer、設計了緩存行這種預讀機制、在操作系統(tǒng)里面,設計了線程模型、在編譯器里面,設計了編譯器的深度優(yōu)化機制等等。

我們都在說,面試造火箭,工作擰螺絲。對于企業(yè)來說,如果選擇一個對計算機底層原理了解更透徹的程序員,不用擔心他濫用線程導致一些不可預測的安全問題。其實也是在降低用人成本。

最后,我把之前分享的視頻全部整理成了文字,想獲取的小伙伴可以從我的個人煮葉簡介中找到,希望能夠以此來提高各位粉絲的通過率。

我是被編程耽誤的文藝Tom,如果我的分享對你有幫助,請動動手指一鍵三連分享給更多的人。關注我,面試不再難!

責任編輯:武曉燕 來源: Tom彈架構
相關推薦

2022-01-09 23:38:42

通信協(xié)議網(wǎng)絡

2020-01-18 08:49:17

目錄安全.ssh木馬

2017-09-18 15:14:43

2021-05-16 17:14:30

線程安全性

2021-01-12 07:39:48

線程線程安全

2021-03-21 23:43:22

線程編程安全

2011-05-31 18:41:45

復印機技巧

2012-12-21 15:24:53

Android 上的安全性

2021-07-03 17:44:34

并發(fā)高并發(fā)原子性

2025-02-21 15:25:54

虛擬線程輕量級

2021-04-29 20:10:17

安全線程存儲

2019-01-28 08:50:09

線程安全

2009-11-30 09:41:38

2019-08-20 16:58:14

戴爾

2010-03-02 16:34:36

WCF線程

2019-10-08 11:35:33

大數(shù)據(jù)安全網(wǎng)絡

2010-11-08 10:04:44

2017-07-06 15:36:56

線程線程安全開發(fā)

2022-09-16 06:59:49

api線程安全

2024-06-06 09:58:13

點贊
收藏

51CTO技術棧公眾號