如果执行同步方法的线程挂起会怎样?
What happens if a thread executing a synchronised method suspends?
如果执行 synchronized
方法的线程挂起会怎样?其他线程是否会获得锁并在同一个 class..?
中继续另一个 synchronized
方法
假设代码如下:
class Test{
public synchronized void methodA(){
//methodA
}
public synchronized void methodB(){
//methodB
}
}
如果ThreadA
执行methodA()
。如果它被 OS 隐式挂起,则在执行该方法时。另一个线程,比如说 ThreadB
可以获得锁并执行 methodB()
吗?还是只有在 ThreadA
完成与 methodA()
的工作后才有可能?
不,它不会强制线程放弃锁,因为它会破坏整个同步的想法。可以通过对象上的 wait
方法调用(在 Object
class 中声明)退出监视器,让其他线程有机会进入它。
Java - The Complete Reference 书中的以下文字应该有所帮助:
This was done because suspend( ) can sometimes cause serious system
failures. Assume that a thread has obtained locks on critical data
structures. If that thread is suspended at that point, those locks are
not relinquished. Other threads that may be waiting for those
resources can be deadlocked.
如果执行 synchronized
方法的线程挂起会怎样?其他线程是否会获得锁并在同一个 class..?
synchronized
方法
假设代码如下:
class Test{
public synchronized void methodA(){
//methodA
}
public synchronized void methodB(){
//methodB
}
}
如果ThreadA
执行methodA()
。如果它被 OS 隐式挂起,则在执行该方法时。另一个线程,比如说 ThreadB
可以获得锁并执行 methodB()
吗?还是只有在 ThreadA
完成与 methodA()
的工作后才有可能?
不,它不会强制线程放弃锁,因为它会破坏整个同步的想法。可以通过对象上的 wait
方法调用(在 Object
class 中声明)退出监视器,让其他线程有机会进入它。
Java - The Complete Reference 书中的以下文字应该有所帮助:
This was done because suspend( ) can sometimes cause serious system failures. Assume that a thread has obtained locks on critical data structures. If that thread is suspended at that point, those locks are not relinquished. Other threads that may be waiting for those resources can be deadlocked.