JAVA 中的实例方法同步
Instance method Synchronization in JAVA
假设有两个线程 A 和 B。有一个对象有 2 个同步方法 dothisOne 和 dothisTwo,它们应该在调用程序中按顺序 (dothisOne--->dothisTwo) 执行。两个线程都必须遵循相同的调用顺序 (dothisOne--->dothisTwo) 。假设两个都重新开始,并且第一个线程 A 在执行 dothisOne 时锁定了对象。一旦它完成 dothisOne 并且控制出来......是否有 ThreadB 开始 dothisOne 的机会(或者)是否 100%保证线程 A 会去 dothisTwo ?这个问题与实例方法有关。如果它是 class 方法(静态),我相信 threadA 会选择 dothisTwo
Are there chances of ThreadB starting dothisOne (or) is it 100% guarenteed that thread A will go for dothisTwo ?
完全没有保证。我怀疑线程 A 更有可能 进入 doThisTwo
,因为基本上在退出监视器和重新进入监视器之间不需要做任何事情 - 它不需要不需要重新安排什么的。但不,这两种情况都可能发生。
If it was class method(static), I believe threadA would go for dothisTwo
不 - 同步不关心实例方法与静态方法。静态和实例同步方法的不同之处在于它们隐式同步的监视器,仅此而已。
基本上,如果你想让两件事作为一个单元发生(在同步方面),你需要围绕这对操作进行同步,而不是仅仅依次进行每个操作。
假设有两个线程 A 和 B。有一个对象有 2 个同步方法 dothisOne 和 dothisTwo,它们应该在调用程序中按顺序 (dothisOne--->dothisTwo) 执行。两个线程都必须遵循相同的调用顺序 (dothisOne--->dothisTwo) 。假设两个都重新开始,并且第一个线程 A 在执行 dothisOne 时锁定了对象。一旦它完成 dothisOne 并且控制出来......是否有 ThreadB 开始 dothisOne 的机会(或者)是否 100%保证线程 A 会去 dothisTwo ?这个问题与实例方法有关。如果它是 class 方法(静态),我相信 threadA 会选择 dothisTwo
Are there chances of ThreadB starting dothisOne (or) is it 100% guarenteed that thread A will go for dothisTwo ?
完全没有保证。我怀疑线程 A 更有可能 进入 doThisTwo
,因为基本上在退出监视器和重新进入监视器之间不需要做任何事情 - 它不需要不需要重新安排什么的。但不,这两种情况都可能发生。
If it was class method(static), I believe threadA would go for dothisTwo
不 - 同步不关心实例方法与静态方法。静态和实例同步方法的不同之处在于它们隐式同步的监视器,仅此而已。
基本上,如果你想让两件事作为一个单元发生(在同步方面),你需要围绕这对操作进行同步,而不是仅仅依次进行每个操作。