Подтвердить что ты не робот

Получение эксклюзивной общесистемной блокировки в Java

Я перерабатываю исполняемый файл Java, который может запускаться несколько раз, и я хочу, чтобы процесс продолжался один за раз. В С# я бы сделал это с помощью имени /system Mutex, но это не кажется возможным в Java. Как я могу достичь этой функциональности?

4b9b3361

Ответ 1

Вы можете использовать эксклюзивный доступ к файлу файловой системы для достижения аналогичного поведения. Я не думаю, что есть что-то похожее на то, что вы упомянули.

<сильные > Примеры

Ответ 2

Каждый раз, когда вы запускаете исполняемый файл Java, вы запускаете новый экземпляр виртуальной машины Java (JVM). Они похожи на разные рабочие станции. Вот почему в Java нет такой вещи, как системный мьютекс.

Ответ 3

Java - это инструмент с наименьшим общим знаменателем, который обеспечивает функциональность, которая является общей для всех платформ, на которых она выполняется, то есть если она еще реализована.
Вы можете использовать JNA (упрощенный способ доступа к родным функциям)

В прошлом я использовал сокеты, чтобы убедиться, что программа не может запускаться, если она была запущена.
Как указано в другом месте, может работать файл на основе Семафора, конечно, недостатком этого является то, что программа сработает, тогда ваш семафор должен быть вручную reset.

Ответ 4

Если ваша операционная система предоставляет эти мьютексы, возможно, вы можете сделать это с помощью родной библиотеки? (http://en.wikipedia.org/wiki/Java_Native_Interface) Конечно, вы будете обращаться к этому ресурсу с помощью ОС, поэтому вы потеряете переносимость, чистая Java дает вам.

Ответ 5

Помните, что Java работает под виртуальной машиной Java. Подобно механизмам синхронизации на уровне ОС, как правило, они влияют только на машину, на которой она выполняется, встроенные механизмы синхронизации Java работают только в этой JVM.

Попытка предотвратить запуск нескольких JVM для выполнения чего-либо аналогична попытке предотвратить запуск приложения одновременно на нескольких физических машинах и, вероятно, не стоит усилий.