執行緒安全現在還沒有明確的定義,有如下通俗的理解記錄如下:
當乙個類被多個執行緒進行訪問並且正確執行,它就是執行緒安全的。
當多個執行緒訪問某各類時,不管執行時環境採用何種排程方式或者這些執行緒將如何交替執行,並且在主調**中不需要任何額外的同步或者協同,這個類都能表現出正確的行為,那麼就稱這個類是執行緒安全的。
如何保證執行緒安全:
1、加鎖:
a、鎖能使其保護的**以序列的形式來訪問,當給乙個復合操作加鎖後,能使其成為原子操作。一種錯誤的思想是只要對寫資料的方法加鎖,其實這是錯的,對資料進行操作的所有方法都需加鎖,不管是讀還是寫
b、加鎖時需要考慮效能問題,不能總是一味地給整個方法加鎖synchronized就了事了,應該將方法中不影響共享狀態且執行時間比較長的**分離出去
c、加鎖的含義不僅僅侷限於互斥,還包括可見性。為了確保所有執行緒都能看見最新值,讀操作和寫操作必須使用同樣的鎖物件
2、不共享狀態:
無狀態物件: 無狀態物件一定是執行緒安全的,因為不會影響到其他執行緒
執行緒關閉: 僅在單執行緒環境下使用
3、不可變物件:
可以使用final修飾的物件保證執行緒安全,由於final修飾的引用型變數(除string外)不可變是指引用不可變,但其指向的物件是可變的,所以此類必須安全發布,也即不能對外提供可以修改final物件的介面。
什麼是執行緒安全
如果你的 所在的程序中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段 如果每次執行結果和 單執行緒執行的結果是一樣的,而且其他的 變數的值也和預期的是一樣的,就是執行緒安全的。或者說 乙個類或者程式所提供的介面對於執行緒來說是 原子操作或者多個執行緒之間的切換不會導致該介面的執行結果存在二義...
什麼是執行緒安全
首先來介紹下兩個基本的概念,程序和執行緒。執行緒 包含在程序之中,是程序中的實際運作單位。程序通過呼叫執行緒,完成不同的功能。乙個物件是否是執行緒安全的,取決於它是否被多個執行緒同時訪問。其實,與其說執行緒安全,倒不如說資源安全更為貼切。所以對執行緒安全給出乙個確切的定義是非常複雜的,在網上可以搜到...
什麼是執行緒安全 死鎖
1 執行緒安全 每個程序都會被系統分配一塊公共區域,該區域就是堆 記憶體 該程序的所有執行緒都能訪問該堆 記憶體 的資料,在不受限制的情況下存在被意外修改的風險,這就是執行緒安全。存在競爭的執行緒就是不安全的,不存在競爭的執行緒就是安全的。2 死鎖 所謂死鎖是指多個併發執行緒因競爭系統資源而處於互相...