鍍金池/ 問答/Java  Linux  網(wǎng)絡(luò)安全/ Java: 鎖重入對性能影響有多大?

Java: 鎖重入對性能影響有多大?

如下,commonDo可能被多個方法(有可能不同步的)調(diào)用,在specialDo調(diào)用commonDo會重入鎖,對性能影響大嗎?
是不是最好把commonDo()的代碼直接放在specialDo里比較好?雖然代碼冗余,但是性能好?

class MyClass{
    public synchronized void specialDo(){
       ...
       commonDo();
    }

    public synchronized void commonDo(){
       ...
    }
}
回答
編輯回答
落殤

synchronized底層是通過monitorenter 和 monitorexit指令來實現(xiàn)的。具體介紹推薦此文
synchronized可重入的機理,只是在內(nèi)部判斷一下當(dāng)前線程是否具有鎖住對象的monitor權(quán)限,如果當(dāng)前線程已經(jīng)擁有了,則只是簡單地作計數(shù)+1。所以鎖是否重入并不影響性能。

2017年1月10日 11:23
編輯回答
我不懂

這個方法上的鎖有用嗎?如果每個線程都會創(chuàng)建一個對象,鎖是沒有任何用處的

2017年9月12日 23:48
編輯回答
黑與白

重進鎖僅僅在基數(shù) +1,性能影響基本可以忽略。類似的做法,可以參考ReentrantLock

2018年8月29日 18:41