天天看點

java進階多線程_Java進階進階多線程學習之路(初篇)

首先來簡單了解一下使用者态和核心态,使用者态和核心态簡單來說隻是程式不同的兩種級别

一般來說作業系統的核心是跑在核心态上的,核心态有什麼特權呢,他可以直接通路硬體,做一些普通程式無法做到的事,比如配置設定記憶體,線程排程,鎖申請,這樣的程式叫核心态的程式,那麼普通的程式如何通路硬體呢,那就需要向核心态的程式申請

在最早jdk1.0時synchronized 被稱為重量級鎖,效率偏低,在大家都認為它效率低的時候呢就誕生了對synchronized的一系列優化,即synchronized内部的四種狀态和更新過程

那麼synchronized效率低,特别重的原因是什麼呢?其實很簡單,synchronized是跑在JVM上的,JVM對于os kernel來說呢就相當于是一個普通的應用程式,那麼你想申請一把鎖,對線程進行排程。實作這件事的時候需要向作業系統核心申請,作業系統核心幫你管理這些線程,管理好了之後回報給你。這個過程簡單來說就是 從使用者态到核心态的通路,通路完了由核心态再回報回來,這個就叫重量級鎖。

現在大家都知道,在java中很多實作中,很多都是輕量級鎖,比如JUC中的CAS(下篇會詳細介紹)。所謂的輕量級鎖和重量級鎖的差別是什麼呢?輕量級鎖都是在使用者态直接完成,不用驚動作業系統,而重量級鎖需要向作業系統申請。在現在synchronized内部的執行過程中,他會首先使用輕量級鎖,在使用者态中完成,如果完成不了才會去申請重量級鎖,即核心态的鎖,這就是synchronized的更新過程。