答案是: 不可以,因為都是獲取到對象本身的鎖。
多個線程訪問同一個類的synchronized方法時, 都是串行執行的 ! 就算有多個cpu也不例外 ! synchronized方法使用了類java的內置鎖, 即鎖住的是方法所屬對象本身. 同一個鎖某個時刻只能被一個執行線程所獲取, 因此其他線程都得等待鎖的釋放. 因此就算你有多余的cpu可以執行, 但是你沒有鎖, 所以你還是不能進入synchronized方法執行, CPU因此而空閑. 如果某個線程長期持有一個競爭激烈的鎖, 那么將導致其他線程都因等待所的釋放而被掛起, 從而導致CPU無法得到利用, 系統吞吐量低下. 因此要盡量避免某個線程對鎖的長期占有 !