Synchronized的個人學習總結
阿新 • • 發佈:2019-01-05
這篇文章是我個人前段時間學習大神們對於Synchronized講解的總結。個人認為挺適合小白從0開始理解Synchronized的。因為我也是看網上的文章加自己寫程式碼理解的,可能也有錯誤,有問題的話,請各位在評論區指出哈。
如果大家急於求成,想馬上知道Synchronized是幹嘛的,那就來對了,請看我的總結:
首先大家要有個概念,monitor。(每個object都有一個監視器鎖(monitor)。當monitor被佔用時就會處於鎖定狀態,synchronized就是用來給monitor上鎖的,當synchronized的程式碼塊執行完就會釋放這個monitor的鎖。)
大家在程式碼中會看到好幾種形式的synchronized,想必也是眼花繚亂不知道每個的具體作用。下面由我來科普:
synchronized(this)獲得的是呼叫該含synchronized方法的引用物件,可能很拗口,上段程式碼,就是t1,t2的鎖(具體程式碼不上了,類名取的通俗易懂)
RunnableTest t1= new RunnableTest();
RunnableTest t2= new RunnableTest();
t1.start();
t2.start();
synchronized(myclass.class)監控的是類本身的,獲取類本身的監控器(monitor)。
synchronized修飾方法獲取的是和synchronized(this)相同。
synchronized修飾static方法,監控的是該類本身的監視器。與synchronized(myclass.class)相同。
所以給小白們剷除一個誤區,synchronized並不是鎖住程式碼裡面的東西,他們鎖的只是監控器本身。執行緒獲取監控器則runnable,獲取不了則blocked。