Я знаком с основным механизмом java-потоков, однако запутался в одном конкретном случае. Ниже приведен пример кода.java - блок синхронизации по байт []
static byte[] syncBuf;
// synchronized block of code
synchronized(syncBuf) {
// Call non-synchronized method
methodA(syncBuf);
}
Мой вопрос, если несколько потоков выполнить приведенный выше код, будет следующий блок поток до Methoda() осуществляется выполнение, так как мы проводим блокировку syncBuf, который передается по ссылке.
EDIT:
Что произойдет, если я изменю выше код с ниже:
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();
}
бы выше интерпретация еще держать? Будет ли следующий поток блокировать до выполнения методаA() - потока?
Да, я пробовал делать все это. Однако syncBuf не запутывается, и вызывающий поток не блокируется в течение длительного времени перед входом в синхронизированный блок кода. Не знаете, как это проверить. – pree
Вышеупомянутый комментарий для моего отредактированного вопроса. Однако я могу проверить это в первом случае. В первом случае вызывающие потоки блокируются. – pree