一個、什麼是線程安全
編寫線程安全的代碼
其核心是管理國事訪問的操做。
共享,可變的狀態的訪問 - 前者表示多個線程訪問, 後者聲明週期內發生改變.
線程安全性安全
多個線程同一時候操做共享的變量,形成線程安全性問題。
* 編寫線程安全性代碼的三種方法:
不在線程之間共享該狀態變量
將狀態變量改動爲不可變的變量
在訪問狀態變量時使用同步
Java同步機制工具:
synchronized
volatile類型變量
顯示鎖(Explicit Lock )
原子變量
2、1 原子性
原子性
好比:讀,原子操做,寫原子操做.
改變變量的值,非原子操做,因爲涉及讀,改,寫
線程安全需要考慮的因素:
對象狀態 - 什麼叫有狀態和無狀態?無狀態對象確定是線性安全的?
複合操做 - 操做有多個步驟完畢的操做 (好比, 先檢測後運行, 變量的操做都分類三步 : 讀取 - 改動 - 寫入. )
競態條件
先檢測後運行
延遲初始化競態條件(單例, 調用方法時才返回對象)
** 待加入實例解釋原子性
2、2 線程安全解決的方法
2.3 加鎖機制
遇到問題 - 可以保證每個變量都是線程安全的,但是假設一個方法中同一時候有多個變量,必須保證變量同步更新纔算線程安全。
多個變量時需要加同一個鎖,保證多個變量同一時候更新。
2.4 用鎖來保護狀態
一般以爲僅僅有寫入的時候才需要鎖,但假設讀取的時候值值不能確保是否有其它現在正在改動或者以改動。相同會遇到問題。
2.5 *** 活躍性與性能
活躍性問題?工具
好比: 線程A等待線程B釋放其持有的資源
性能問題?
好比: 線程切換過於頻繁,CPU在線程調度上花費資源過多
*** 新的文章中總結鎖相關知識與問題
思考
可能出現線程安全的地方?
變量相關
方法操做變量
狀況:
多個線程訪問一個變量
多個線程訪問多個變量
多個線程訪問多個方法,同一時候操做一個變量
多個線程訪問多個方法。同一時候操做多個變量性能
2014-05-24 發行
版權聲明:本文博客原創文章。博客,未經贊成,不得轉載。spa