對“共享資源”的訪問爲了保證正確性,引入了“臨界區”的概念(critical section)
對於“臨界區”的訪問java通常使用synchronized和鎖進行。
對於“臨界區”的訪問策略是,當線程A要訪問“臨界區”時會先進行判斷,如果該“臨界區”中有其他的線程存在,那麼線程A將休眠等待獲得訪問許可。
java中,被synchronized修飾的對象將是線程安全的,換句話說:
java類中被synchronized修飾的方法都是該對象的“臨界區”,在同一時刻只能有一個線程訪問。需要注意的是:
獲得鎖的線程可以迭代調用其他加鎖的的方法
靜態方法是特殊的,即沒有獲得鎖的線程也可以訪問已經被佔用的對象的靜態方法,這需要注意