成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何理解什么是線程安全?

安全 應用安全
線程安全是應用于多線程代碼的一種計算機編程概念,它確保多個線程能夠按照程序的設計正確的訪問共享數據結構。

 什么是線程安全

線程安全在多線程編程時是一個比較重要的概念,我們下先來看下維基百科是如何定義這個概念的:

https://en.wikipedia.org/wiki/Thread_safety

  • Thread safety is a computer programming concept applicable to multi-threaded code. Thread-safe code only manipulates shared data structures in a manner that ensures that all threads behave properly and fulfill their design specifications without unintended interaction.

[[256496]]

意思是說:

線程安全是應用于多線程代碼的一種計算機編程概念,它確保多個線程能夠按照程序的設計正確的訪問共享數據結構。

或者再貼近編程語言的角度一點來講,線程安全指的是同時最少有兩個及以上的線程操作共享的數據區域,并且至少有一個是寫操作。如果你還想不明白,可以去衛生間觀察一下,一個廁位同時能有幾個人使用。

線程安全的級別

線程安全的級別或者粒度有三種,如下:

(1)線程安全

這種情況下其實沒有線程安全問題,比如上面的例子中,每個人都有自己專用的衛生間,所以不會存在競爭問題。

(2)條件安全

條件安全,顧名思義是有條件的,所有人共用幾個衛生間,搶到資源的就把門關上,通過門來隔離資源,后面的人就在外面等待直到里面的人出來。

(3)不安全

這種情況下連門都沒有,所以并不能很好保證資源安全,所以這種情況***不能讓同時讓多個人直接使用。

實現線程安全的方式

大體來說有兩種,首先我們明白安全問題來自于競爭,沒有競爭就不會有問題。

方式一:

核心思路是避免共享數據結構,共享狀態。包括:

(1)使用線程local變量

(2)使用不可變對象

方式二:

核心思路是共享不可避免,需要通過條件來確保按照。包括:

(1)互斥鎖

(2)CAS原子操作

Java語言里面實現策略

這里以Java語言為例子,上面談到的4種方式,其實在Java里面都支持,分別對應的解決手段為:

(1)ThreadLocal變量

(2)不可變對象有String,CopyOnWrite集合類

(3) 互斥鎖包括JDK5之前的內置鎖synchronized和JDK5之后的Lock接口

(4) J.U.C里面Atom開頭的類

可以看出來Java里面的處理策略還是比較多的,當然不同的策略其實也有具體的適用場景,此外引入了線程安全和同步手段會對代碼的性能造成一定的影響,這一點需要了解。

一般來說避免共享數據結構是能夠比較優雅的解決并發問題,這種程序對多線程更友好,性能也會更高。比如單機的ThreadLocal和分布式的Ator模型。這里面不存在競爭。其次是不可變變量,多線程操作的都是CopyOnWrite,這也是為什么一些動態編程語言如Scala里面的默認數據結構大多數都是不可變的。不可變有不可變的好處,但缺點也是明顯的,如果需要頻繁對數據修改,那么會創建很多臨時對象和占用更多的內存。

上面這兩種場景,我們一般稱為無鎖實現,性能很好。如果避免不了共享數據,那么接著性能比較好的就是CAS這種原子操作,這種情況下我們一般也稱是無鎖的,但其實是利用了操作系統的原子指令來實現的,在競爭不激烈的場景下性能比較好,一般的編程語言都有封裝好的工具類。如果競爭激烈,其實性能未必比使用互斥鎖高。互斥鎖一般也稱重量級鎖,需要OS干涉線程的調度,適合用于競爭激烈的場景下,這種方式下線程上下文的交換會降級系統的性能,在使用時需要注意。

線程并發技能圖譜

多線程編程領域其實涉及很多計算機知識,線程安全只是其中的冰山一角,作為一名技術人員我們有必要系統的學習和攻破并發編程這一塊,很多人覺得并發編程很難,其實是沒有掌握系統的學習方法,在這里我放出我之前總結并發知識的一張圖譜,供大家參考學習:

查看原圖

 

總結

本文主要介紹了什么是線程安全,及實現線程安全的一些手段,并結合Java語言描述了相關的知識,***又總結了Java里面并發學習的知識圖譜,只要把里面所有的內容都了解掌握,那么在多線程領域就可以從青銅升級到王者段位了,不過學習之路,學無止境,不能急功近利,一定得重基礎,然后循序漸近,日拱一卒,就算慢點也無妨,堅持下去,肯定有所收獲。

責任編輯:武曉燕 來源: 我是攻城師
相關推薦

2024-05-20 13:13:01

線程安全Java

2025-04-24 08:15:00

Redis單線程線程

2020-09-03 06:42:12

線程安全CPU

2023-09-01 13:49:00

內存進程線程

2022-01-24 07:01:20

安全多線程版本

2024-03-22 12:29:03

HashMap線程

2024-06-06 09:58:13

2020-11-09 14:30:28

Linux多線程數據

2019-03-17 16:18:39

影子物聯網物聯網IOT

2023-12-22 09:00:00

安全密鑰擴展加密技術

2022-09-15 10:42:21

API安全網絡攻擊

2018-05-04 06:00:10

2022-05-27 12:22:56

物聯網物聯網安全

2023-09-18 08:01:06

Spring管理Mybatis

2018-06-26 05:23:19

線程安全函數代碼

2012-02-21 14:14:47

Java

2022-04-06 07:50:28

線程安全代碼

2023-01-26 02:07:51

HashSet線程安全

2024-06-17 00:02:00

線程安全HashMapJDK 1.7

2023-09-07 08:15:58

場景同步異步
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩国产中文字幕 | 亚洲精品久久国产高清情趣图文 | 羞羞视频在线观免费观看 | 亚洲综合无码一区二区 | 欧美日韩国产三级 | 亚洲精品中文字幕 | 欧美激情视频一区二区三区在线播放 | 精品影院| 国产色片在线 | 天天做日日做 | 久在线观看 | 日韩欧美国产一区二区三区 | 一二区视频 | 国产精品成人在线播放 | 2018中文字幕第一页 | 天天操天天拍 | 亚洲成人精品在线 | 国产午夜精品一区二区三区在线观看 | 亚洲日韩中文字幕一区 | 少妇性l交大片免费一 | 精品亚洲永久免费精品 | 中文字幕高清av | 中文字幕在线二区 | av免费在线播放 | 一区二区精品 | 亚洲视频国产 | 中文在线а√在线8 | 亚洲性在线 | 欧美成人在线网站 | 国产一区免费 | 精品国产一区二区三区免费 | 精品一区国产 | 粉嫩国产精品一区二区在线观看 | 91婷婷韩国欧美一区二区 | 91高清在线观看 | 国产精品一区二区久久 | 日本特黄a级高清免费大片 国产精品久久性 | av福利网 | 国产一区二区三区在线 | av免费在线观看网站 | 天堂三级|