Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于类级锁_Java_Multithreading - Fatal编程技术网

Java 关于类级锁

Java 关于类级锁,java,multithreading,Java,Multithreading,在一次Java访谈中,有人问线程上下文,有一个类ABC由两个静态同步方法m1()和m2()组成,如果T1锁定了方法m1(),则有两个线程T1,T2那么同时T2是否有可能锁定m2()方法,我回答说因为m1()和m2()是静态同步的,所以它们具有类级锁,所以如果T1线程锁定m1()方法,则在T1从m1()方法释放锁之前,其他线程不能同时锁定m1(),但同时线程T2可以锁定方法m2(),请告知这是正确的 错了。。。同步方法上的锁会阻止所有其他同步方法调用在Java中,不获取方法上的锁,而是获取对象上的

在一次Java访谈中,有人问线程上下文,有一个类ABC由两个静态同步方法
m1()
m2()
组成,如果
T1
锁定了方法
m1(),则有两个线程
T1
T2
那么同时
T2
是否有可能锁定
m2()
方法,我回答说因为
m1()
m2()
是静态同步的,所以它们具有类级锁,所以如果
T1
线程锁定
m1()
方法,则在
T1
m1()
方法释放锁之前,其他线程不能同时锁定
m1()
,但同时线程
T2
可以锁定方法
m2()
,请告知这是正确的

错了。。。同步方法上的锁会阻止所有其他同步方法调用

在Java中,不获取方法上的锁,而是获取对象上的锁。同步静态方法隐式使用类对象作为锁。当然,同一个类中的两个方法都将争夺同一个锁,并且不允许并发执行。

那么您的意思是说,如果T1线程在静态同步方法m1()上获得类级锁,那么同时线程T2不能在另一个静态同步方法m2()上获得锁由于线程T1已经在方法m1()上设置了类级锁。请您用一个小示例演示一个方法,以便掌握更多信息。提前谢谢。是的,没错。。。我不能给你一个比你写的更详细的例子。如果你想的话,试着输入它,你会看到的…谢谢你完美的解释,你能提供一些例子来说明这一点吗,这样会有助于理解更多。提前谢谢。