2014-01-29 71 views
0

假設一個類有兩個方法,如下面的那些內同一類的不同的同步方法創建一個新的線程同步的方法:調用從Java中

public synchronized void methodA() { 
    // do some stuff 

    new Thread() { 
    public void run() { 
     methodB(); 
    } 
    }.start(); 
} 

public synchronized void methodB() { 
    // do some stuff 
} 

我們稱之爲methodA(),將新的線程是被稱爲methodA()的人阻止?

回答

3

可能不是:new Thread().start()立即返回,因此在新線程實際啓動並調用methodB()時,很可能原始線程已經退出methodA()

然而,如果你這樣做:

public synchronized void methodA() throws InterruptedException { 
    new Thread() { 
    public void run() { 
     methodB(); 
    } 
    }.start(); 
    Thread.sleep(10000); 
} 

methodB將阻止約10秒鐘,等待原來的線程來解除鎖定。