Разница между синхронизированным (это) и несколькими синхронизированными методами классаJAVA

Программисты JAVA общаются здесь
Anonymous
Разница между синхронизированным (это) и несколькими синхронизированными методами класса

Сообщение Anonymous »

В программировании интервью по открытию (WROX Publications), код для производителя потребительских проблем использует «синхронизированное» ключевое слово для каждого из методов продукта () и потребления () внутри класса, называемого IntBuffer. Отличается ли это, чем использование синхронизированного (этого) внутри каждого из этих методов? В книге говорится: «Когда поток занят ожиданием в продукте (), ни один поток не может ввести потребление (), потому что методы синхронизируются». Я не чувствую, что это имеет смысл для кода в книге, потому что, когда поток занят ожиданием в продукте (), ни один поток не может ввести продукт (). Однако другой поток может войти в потребление (), который разбивает идею взаимного исключения. Методы производят и потребляют, должны быть полностью синхронизироваться правильно?public class IntBuffer
{
private int index;
private int[] buffer = new int[8];

// Function called by producer thread
public synchronized void produce(int num) {
while(index == buffer.length - 1) {
try { wait();}
catch(InterruptedException ex) {}
}
buffer[index++] = num;
notifyAll();
}

// Function called by consumer thread
public synchronized int consume() {
while(index == 0) {
try { wait();}
catch(InterruptedException ex) {}
}
int ret = buffer[--index];
notifyAll();
return ret;
}
}


Подробнее здесь: https://stackoverflow.com/questions/444 ... s-of-class

Вернуться в «JAVA»