我熟悉基本的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