我熟悉基本的Java線程機制,但是,對某個特定情況感到困惑。以下是示例代碼。Java - 同步塊上的字節[]
static byte[] syncBuf;
// synchronized block of code
synchronized(syncBuf) {
// Call non-synchronized method
methodA(syncBuf);
}
我的問題是如果多個線程執行上面的代碼,將下一個線程塊,直到了methodA()執行完畢,因爲我們正在持有鎖syncBuf其通過引用傳遞。
編輯:
如果我更改上面的代碼與下面的情況:
static byte[] syncBuf;
// synchronized block of code
synchronized(syncBuf) {
// Call non-synchronized method in a new thread
new Thread(new Runnable() {
@Override
public void run() {
methodA(syncBuf);
}}).start();
}
請問上述解釋仍持有?下一個線程會阻塞,直到methodA() - 線程執行完畢嗎?
是的,我試過這麼做。但是,在進入同步代碼塊之前,syncBuf既不會被搞亂,也不會被調用線程長時間阻塞。不知道如何驗證它。 – pree 2014-10-03 00:03:00
以上評論是針對我編輯的問題。我可以在第一種情況下驗證它。調用線程在第一種情況下會被阻塞。 – pree 2014-10-03 00:13:03