LockMode.Read - это общая блокировка, поэтому все операции чтения в этом режиме блокировки смогут читать из одного и того же источника без блокировки.
Я думаю, что вам нужна эксклюзивная блокировка, которая используетLockMode.PESSIMISTIC_WRITE.И HSQLDB поддерживает этот тип блокировки ( docs )
Я бы также добавил Thread.yield()
между двумя потоками, чтобы позволить первому запускаться фактически, иначе 2-й поток мог бы начаться раньше1-й, который вы определили.
Я не думаю, что HSQLDB имеет тайм-аут блокировки, и, таким образом, выдает исключение, когда поток ожидает блокировки в течение более заданного периода времени.Вы увидите, что ses.load
в T2 всегда будет происходить после ses.close
от t1.
Если у вас есть база данных mysql, вы можете обновить конфигурацию с помощью innodb_lock_wait_timeout = 2
, которая будетЗаставить БД выдать тайм-аут блокировки через 2 секунды.