Все, что вам нужно сделать здесь, это убедиться, что никакие два потока не могут попасть внутрь submitObject и deleteObjecct одновременно.Для этого просто объявите эти методы синхронизированными.В этом случае объект очереди, который является общим для классов, не позволит двум потокам работать в блоке, который он синхронизирует вместе.
Если вы хотите, кроме того, иметь какой-то механизм блокировки, такой как:
", если поток хочет удалить объект, он должен ждать, если такого нетобъект в очереди. "
, тогда вам нужно сделать больше, чем просто синхронизировать таким образом: оба метода должны быть синхронизированы, но поток, входящий в deleteObject, должен быть остановлен с помощью this.waitочереди, пока объект не станет доступным:
public synchronized deleteObject() {
while( isEmpty() ) {
try {
wait();
} catch( Exception ex ) {
ex.printStackTrace();
}//catch
}//while
//actually do delete object.
...
}//met
, а затем submitObject должен уведомить потоки в состоянии ожидания, выполнив:
public synchronized submitObject() {
//do put object
...
notifyAll();
}//met
, и вы также можете пересечь роли и добавитьнекоторый код в обоих методах, например, позволяет блокировать отправителя, если очередь заполнена, и уведомлять о наличии свободного места в очереди.