在java中用两个线程执行两个synchronized方法

nir*_*esh 1 java multithreading synchronized

可以说我 在课堂上有方法synchronized hi(){}synchronized hello(){}方法ABC.和两个线程t1t2正在执行t1.hi()t2.hello()分别.它们可以同时执行还是存在任何问题?

Mik*_*ike 5

不,同一对象中的2个同步方法不能同时执行:

https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html

来自文档:

对同一对象的两个同步方法的调用不可能进行交错.当一个线程正在为对象执行同步方法时,所有其他线程调用同一对象的同步方法(暂停执行)直到第一个线程完成对象.

这里的关键是锁定对象.正如托马斯指出,想必t1t2是同一类的不同实例,使他们能够实际执行hi(),并hello()兼任.

如果t1并且t2只是两个不同的线程调用hi()并且hello()在同一个对象上,则上述语义保持为真,并且这两个方法不能并行执行.