假设一个类有两个方法,如下所示:
public synchronized void methodA() {
// do some stuff
new Thread() {
public void run() {
methodB();
}
}.start();
}
public synchronized void methodB() {
// do some stuff
}
我们调用methodA()
,新线程是否会被调用methodA()
的线程阻止?
答案 0 :(得分:3)
可能不会:new Thread().start()
立即返回,所以当新线程实际启动并调用methodB()
时,原始线程很可能已经退出methodA()
如果你这样做:
public synchronized void methodA() throws InterruptedException {
new Thread() {
public void run() {
methodB();
}
}.start();
Thread.sleep(10000);
}
你的methodB
将阻止大约10秒钟,等待原始线程释放锁定。