关于同步
如果synchronized方法调用另一个非同步方法,那么非同步方法是否存在锁定?
如果线程 A 调用同步方法 M1 ,然后又调用非同步方法 M2,那么线程 B 仍然可以在不阻塞的情况下调用 M2 方法。 同步方法获取并释放调用它的对象的内部锁。 非同步方法不会尝试获取任何锁(除非在代码中明确完成)。 因此,如果需要确保 M1 方法与 M2 方法的互斥,不管 M1 是否同步,都应使 M2 方法保持同步。 锁属于线程 ,而不属于方法(或更确切地说,属于其堆栈帧)。 如果 一个方法被 synchronized 修饰,则可以保证该线程在方法体开始之前拥有锁,在方法执行结束后释放锁。 另一个线程仍然可以调用第二个非同步方法。 任何线程都可以随时调用非同步方法。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。