1 回答
TA贡献1828条经验 获得超3个赞
Java 教程 说:
当一个线程正在执行一个
synchronized
对象的方法时,所有其他调用synchronized
同一对象的方法的线程都会阻塞(暂停执行),直到第一个线程处理完该对象。
Java Language Reference 说(强调是我的):
8.4.3.6。
synchronized
方法方法
synchronized
在执行之前获取监视器(第 17.1 节)。对于类(静态)方法,使用与方法类的 Class 对象关联的监视器。
对于实例方法,使用与 this(调用该方法的对象)关联的监视器。
17.1. 同步
Java 编程语言为线程之间的通信提供了多种机制。这些方法中最基本的是同步,它是使用监视器实现的。Java 中的每个对象都与一个监视器相关联,线程可以锁定或解锁监视器。一次只有一个线程可以锁定监视器。任何其他试图锁定该监视器的线程都会被阻塞,直到它们能够获得对该监视器的锁定。一个线程 t 可能会多次锁定一个特定的监视器;每次解锁都会反转一次锁定操作的效果。
该
synchronized
语句(第 14.19 节)计算对对象的引用;然后它会尝试在该对象的监视器上执行锁定操作,并且在锁定操作成功完成之前不会继续进行。执行完锁定操作后,将synchronized
执行语句体。如果主体的执行已经完成,无论是正常的还是突然的,都会在同一个监视器上自动执行解锁操作。14.19。同步声明
一条
synchronized
语句代表正在执行的线程获取互斥锁(第 17.1 节),执行一个块,然后释放锁。当执行线程拥有锁时,没有其他线程可以获取锁。
添加回答
举报