Межпроцессный мьютекс Java

Мне нужно реализовать какой-то межпроцессный мьютекс в Java. Я рассматриваю возможность использования API FileLock, как рекомендовано в этом нить. В основном я буду использовать фиктивный файл и блокировать его в каждом процессе.

Это лучший подход? Или что-то подобное встроено в стандартный API (не могу найти).

Подробнее см. ниже:

Я написал приложение, которое читает некоторые входные файлы и обновляет некоторые таблицы базы данных в соответствии с тем, что в них находит (это сложнее, но бизнес-логика здесь не имеет значения).

Мне нужно обеспечить взаимное исключение между несколькими обновлениями базы данных. Я пытался реализовать это с помощью LOCK TABLE, но это не поддерживается используемым мной движком. Итак, я хочу реализовать поддержку блокировки в коде приложения.


person Filip    schedule 14.04.2014    source источник


Ответы (2)



Зачем использовать файлы, если у вас есть база данных? Попробуйте использовать блокировку базы данных следующим образом (https://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html).

Кстати, какой движок базы данных вы используете? Это может помочь, если вы перечислите его.

person Denis Kulagin    schedule 14.04.2014
comment
Двигатель будет Brighthouse. Но он не поддерживает какой-либо тип блокировки, как указано в вопросе. - person Filip; 14.04.2014
comment
Может быть, это не связано с вопросом, но в чем причина использования механизма базы данных, который не позволяет использовать какие-либо инструменты для одновременной модификации данных? - person Denis Kulagin; 14.04.2014
comment
Это очень хорошо для высокопроизводительных запросов с большим количеством данных. Но у него есть некоторые ограничения по сравнению со стандартными движками MySQL. - person Filip; 14.04.2014
comment
Понятно. Но при использовании MySQL или подобных движков параллелизм и его настройка были самой головной болью (взаимоблокировки и т. д.). Если бы я знал, что он привязан к одному клиенту/соединению, я бы определенно значительно увеличил его производительность (как я делаю для некоторых локальных установок, когда не используются параллельные запросы AJAX). - person Denis Kulagin; 14.04.2014