Это не ответ на первоначальный вопрос, а предложение о другом способе решения данной проблемы.
Вы можете использовать пул из одного потока (java.util.concurrent):
Executor executor = Executors.newSingleThreadExecutor();
и когда вы хотите записать / удалить в БД:
executor.call(new Runnable() {
@Override public void run() { ... write to DB}
});
executor.call(new Runnable() {
@Override public void run() { ... delete in DB}
});
Где бы вы их ни называли, они будут работать в одном потоке.
РЕДАКТИРОВАТЬ:из javadoc newSingleThreadExecutor: «Создает исполнителя, который использует один рабочий поток, работающий в неограниченной очереди. (Обратите внимание, однако, что если этот единственный поток завершается из-за сбоя во время выполнения до завершения работы, то новый при необходимости занимает его местовыполнять последующие задачи.) Задачи гарантированно выполняются последовательно, и в любой момент времени будет активна не более одной задачи. В отличие от эквивалентного в противном случае newFixedThreadPool (1) возвращаемый исполнитель гарантированно не может быть реконфигурируем для использования дополнительных потоков.