Ответ 1
Вы можете использовать эксклюзивный доступ к файлу файловой системы для достижения аналогичного поведения. Я не думаю, что есть что-то похожее на то, что вы упомянули.
<сильные > Примеры
Я перерабатываю исполняемый файл Java, который может запускаться несколько раз, и я хочу, чтобы процесс продолжался один за раз. В С# я бы сделал это с помощью имени /system Mutex, но это не кажется возможным в Java. Как я могу достичь этой функциональности?
Вы можете использовать эксклюзивный доступ к файлу файловой системы для достижения аналогичного поведения. Я не думаю, что есть что-то похожее на то, что вы упомянули.
<сильные > Примеры
Каждый раз, когда вы запускаете исполняемый файл Java, вы запускаете новый экземпляр виртуальной машины Java (JVM). Они похожи на разные рабочие станции. Вот почему в Java нет такой вещи, как системный мьютекс.
Java - это инструмент с наименьшим общим знаменателем, который обеспечивает функциональность, которая является общей для всех платформ, на которых она выполняется, то есть если она еще реализована.
Вы можете использовать JNA (упрощенный способ доступа к родным функциям)
В прошлом я использовал сокеты, чтобы убедиться, что программа не может запускаться, если она была запущена.
Как указано в другом месте, может работать файл на основе Семафора, конечно, недостатком этого является то, что программа сработает, тогда ваш семафор должен быть вручную reset.
Если ваша операционная система предоставляет эти мьютексы, возможно, вы можете сделать это с помощью родной библиотеки? (http://en.wikipedia.org/wiki/Java_Native_Interface) Конечно, вы будете обращаться к этому ресурсу с помощью ОС, поэтому вы потеряете переносимость, чистая Java дает вам.
Помните, что Java работает под виртуальной машиной Java. Подобно механизмам синхронизации на уровне ОС, как правило, они влияют только на машину, на которой она выполняется, встроенные механизмы синхронизации Java работают только в этой JVM.
Попытка предотвратить запуск нескольких JVM для выполнения чего-либо аналогична попытке предотвратить запуск приложения одновременно на нескольких физических машинах и, вероятно, не стоит усилий.