1. 程式人生 > >(學習筆記)什麼是synchronized?什麼是lock?

(學習筆記)什麼是synchronized?什麼是lock?

Lock 也就意味著是併發程式設計

那麼什麼是併發程式設計呢?

所謂併發程式設計是指在一臺處理器上"同時"處理多個任務。併發是在同一實體上的多個事件。多個事件在同一時間間隔發生。

Synchronized:

在多執行緒程式設計中,執行緒安全問題是一個最為關鍵的問題,

其核心概念就在於正確性,即當多個執行緒訪問某一共享、可變資料時,始終都不會導致資料破壞以及其他不該出現的結果。而所有的併發模式在解決這個問題時,採用的方案都是序列化訪問臨界資源 。在 Java 中,提供了兩種方式來實現同步互斥訪問:synchronized 和 Lock。

在上面一篇文章中,我們瞭解到如果一個程式碼塊被synchronized修飾了,當一個執行緒獲取了對應的鎖,並執行該程式碼塊時,其他執行緒便只能一直等待,等待獲取鎖的執行緒釋放鎖,而這裡獲取鎖的執行緒釋放鎖只會有兩種情況:

  1)獲取鎖的執行緒執行完了該程式碼塊,然後執行緒釋放對鎖的佔有;

  2)執行緒執行發生異常,此時JVM會讓執行緒自動釋放鎖。

  那麼如果這個獲取鎖的執行緒由於要等待IO或者其他原因(比如呼叫sleep方法)被阻塞了,但是又沒有釋放鎖,其他執行緒便只能乾巴巴地等待,試想一下,這多麼影響程式執行效率。