当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
参考答案:
当一个线程进入一个对象的synchronized
方法后,其他线程能否进入此对象的其他方法取决于这些其他方法是否也是synchronized
的。
- 如果其他方法没有被
synchronized
修饰:那么其他线程可以同时进入这些非synchronized
方法。因为synchronized
只锁定调用它的方法,而不是整个对象。 - 如果其他方法也被
synchronized
修饰:那么其他线程需要等待当前线程释放该对象的锁,才能进入这个synchronized
方法。
但需要注意的是,即使其他线程可以进入对象的非synchronized
方法,它也不能访问该对象的任何synchronized
方法或synchronized
代码块,除非当前持有该对象锁的线程释放了锁。
总之,当一个线程持有一个对象的锁并进入其synchronized
方法时,其他线程可以访问该对象的非synchronized
方法,但不能访问其synchronized
方法或synchronized
代码块,直到当前线程释放了锁。