【发布时间】:2020-07-05 08:40:22
【问题描述】:
假设我在一个方法中同步了两部分代码。所以 block1 和 block2 周围都有关键字 'synchronized',并且都使用 'this',这意味着两个块都被同一个对象锁保护。
现在如果block1正在被一个线程执行,是否意味着没有其他线程可以执行block2?
【问题讨论】:
-
是的。 [填充文字]
-
一个且只有一个同步方法可以在给定时间运行。对另一个同步方法的调用必须等到第一个方法完成。
-
@Amitkumar 这不正确,也没有回答问题。谁可以执行
synchronized块或方法取决于正在同步的对象。 -
最后我读到,当一个类中有多个同步方法(静态和实例)时,
Java一次只允许一个这样的方法运行。 -
@Amitkumar 这不是它的工作原理。一个非静态同步方法,在一个实例上同步,所以多个非静态同步方法不能同时运行在同一个对象上,但可以运行在不同 对象。非静态同步方法等效于整个方法体上的
synchronize(this) {...}。静态同步方法在类上同步,所以同一个类上的多个静态同步方法不能同时运行。静态同步方法不会阻塞非静态同步方法,反之亦然。
标签: java multithreading synchronized