Java並發-線程安全性
阿新 • • 發佈:2018-02-08
順序 多個 分享 順序執行 思路 變量 之間 因此 重入
首先了解一下多線程的概念
多線程:兩段或以上的代碼同時進行,多個順序執行流。
並發和並行的區別
並發:做一下這個做一下那個。
並行:同時進行。
線程和進程的區別
進程:資源分配的基本單位,運行中的程序。進程中包括多個線程,線程們共享進程的資源。
線程:處理器調度的基本單位。
線程的狀態:
線程創建的方法:
(1)繼承Thread類 (2)實現Runnable接口 (3)匿名內部類、Lambda表達式 (4)帶返回值的線程
要想使對象是線程安全的,需要采用同步機制來協同,如果無法實現,那麽可能會導致數據破壞和其他的結果,在Java機制中,提供了synchronize、volatile、顯式鎖等機制來進行,也有三種思路:(1)不在線程之間共享數據。(2)將狀態變量修改成不可變變量。(3)在訪問時使用同步。
什麽是線程安全性:某個類的行為和其規範一致。
原子性:如果某個操作是不可分割的,那麽我們就可以稱之為原子性操作。
我們在解決線程競態問題時,不可能只靠通過設置線程安全變量來進行,Java為我們提供了加鎖機制。
內置鎖:Java為我們提供了synchronize來實現內置鎖,synchronize方法以Class對象作為鎖。
重入:當某個線程請求被其他線程持有的鎖時,就會發生阻塞。然而由於內置鎖時可重入的,因此某線程在請求一個已經由它持有的鎖時,該請求就會成功。重入的實現方法時為每一個鎖關聯一個獲取計數值和一個所有者線程,當技術值為0時,表示該鎖沒有被線程持有。如果重入後,計數值會加,當線程退出同步代碼時,計數值會減,當計數值為0時,該鎖會釋放。
Java並發-線程安全性