在一次Java访谈中,有人向线程询问了一个类ABC,它包含两个静态同步方法m1()
和m2()
,并且有两个线程T1
, T2
,如果T1
锁定方法m1()
,那么同时T2
可以锁定m2()
方法,我回答说由于m1()
和m2()
是静态同步的,因此它们具有类级别锁定,因此如果T1
线程获取m1()
方法上的锁,则其他任何线程都无法锁定{ {1}}同时m1()
从T1
方法释放锁定,但同时线程m1()
可以锁定方法T2
,请告知它是{1}}正确。
答案 0 :(得分:2)
错误...对synchronized方法的锁定会阻止所有其他同步方法调用
答案 1 :(得分:1)
一个人不会在Java中获取方法上的锁,而是获取 objects 上的锁。同步静态方法隐式使用类对象作为锁。当然,同一个类中的两个方法都会争用同一个锁,并且不允许同时执行。