Oracle по умолчанию выполняет блокировку на уровне строк. Вы упоминаете использование нескольких потоков. Я подозреваю, что один поток блокирует одну строку, а затем пытается заблокировать другую, заблокированную другим потоком. Затем этот другой поток пытается заблокировать строку, заблокированную первым потоком. В этот момент Oracle автоматически обнаружит тупик и устранит его. Две упомянутые выше строки могут быть в одной или разных таблицах.
Тщательный обзор того, что делает каждый поток, является отправной точкой. Может возникнуть необходимость решить не запускать вещи параллельно или может потребоваться использовать явный механизм блокировки (например, выберите для обновления).
LMK о том, что вы найдете, и о любых дополнительных вопросах….
К