【发布时间】:2014-11-01 13:59:57
【问题描述】:
我有一个听起来很基本的问题,但就是这样。正如 Java 中众所周知的那样,synchronize 关键字用于处理访问一个特定实例的多个线程。现在想象如果一个实例 A 有一个同步方法do()。这是否意味着如果一个线程 T1 执行了方法do() 并因此获得了 A 的锁,那么在 T1 释放锁之前没有其他线程将访问实例 A(即使其他方法没有同步)?或者这意味着所有未同步的方法(或代码块)都可以访问,除了特定的 do() 方法可能一次只能由一个线程执行?
【问题讨论】:
-
我在这里没有看到任何好的答案。有人链接到的较旧问题对 why 和 when 使用
synchronized有很好的答案,但对它的实际作用没有简明的答案。答案很简单:JVM 不允许两个线程同时在同一个对象上synchronize。这里的所有都是它的。请记住,同步实例方法在this上同步,而同步静态方法在类对象上同步,这就是您需要了解synchronized实际上做什么的全部内容。
标签: java multithreading synchronization