如果一个线程对一个对象的同步方法有两次调用。执行第一次调用时,线程将获得监视器锁定。但那么,线程是否会出现:
在第一次调用结束后释放锁定,并在执行第二次调用时尝试再次获取锁定?
或者,线程是否会保持锁定,直到它完成第二次调用(不仅仅是第一次调用)。然后在最后发布它?
换句话说,线程是否会获得锁定,完成对同步方法的所有调用,然后释放锁定? ......或者线程是否应该多次获得和释放锁?
答案 0 :(得分:3)
当线程调用synchronized方法时,它会自动获取该方法对象的内部锁,并在方法返回时释放它。
就这么简单。当第一个方法返回时,线程将释放对象锁,并且必须再次为第二个方法获取它。
答案 1 :(得分:1)
当线程试图在对象中执行同步方法A时,首先它必须获取对象的锁定。如果获取锁定成功,则线程可以执行方法A.没有其他线程可以在此对象上执行其他同步方法。
如果在执行方法A期间,同一个线程尝试在同一个对象中执行同步方法B,它可以这样做,因为它已经锁定了该对象。通过这种方式,线程可以执行方法A和B,并且只执行一次锁定。但是一旦线程结束同步方法A的执行,该对象上的锁也会被释放。