【问题标题】:What happens if a thread executing a synchronised method suspends?如果执行同步方法的线程挂起会发生什么?
【发布时间】:2020-07-20 08:50:41
【问题描述】:

如果执行synchronized 方法的线程挂起会怎样?其他线程是否会获得锁并继续同一类中的另一个synchronized 方法..?

假设代码是这样的:

class Test{
   public synchronized void methodA(){
      //methodA
   }
   public synchronized void methodB(){
      //methodB
   }
}

如果ThreadA 执行methodA()。并且在执行该方法时,如果它被操作系统隐式挂起。另一个线程,比如ThreadB 能否获得锁并执行methodB()?还是只有在ThreadA 完成与methodA() 的工作后才有可能?

【问题讨论】:

标签: java multithreading synchronized


【解决方案1】:

不,它不会强制线程放弃锁,因为它会破坏同步的整个想法。可以通过对象上的wait方法调用(在Object类中声明)退出监视器,让其他线程有机会进入。

【讨论】:

    【解决方案2】:

    阅读本书Java - The Complete Reference 中的文字应该会有所帮助:

    这样做是因为suspend()有时会导致严重的系统 失败。假设一个线程已经获得了关键数据的锁 结构。如果那个线程在那个时候被挂起,那些锁是 没有放弃。可能正在等待这些的其他线程 资源可能会死锁。

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 2019-05-16
      • 1970-01-01
      • 2020-04-17
      • 2021-10-13
      • 2016-05-14
      相关资源
      最近更新 更多