2012-05-16 6 views
10

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

  • синхронизированные методы/блоки
  • любой замок, который реализует java.util.concurrent.locks

Потому что кажется для меня они все нитки?

Поддерживает ли Java поддержку IPC, например, семафоров между процессами?

ответ

10

Правильно. Вы не можете использовать какие-либо стандартные механизмы синхронизации, потому что они работают в одну JVM.

Solutions

  1. Вы можете использовать блокировки файлов, введенные в Java 7.
  2. Вы можете использовать синхронизацию с помощью сущностей базы данных.
  3. Один из уже реализованных решений, таких как Terracota, может оказаться полезным
  4. Передумайте свой дизайн. Если вы новичок в java мире, попробуйте подробно поговорить с более опытными инженерами. Ваш вопрос показывает, что ИМХО вы просто ошибаетесь.
+0

спасибо! Мы повторно используем ту же архитектуру из другого проекта, поэтому некоторые из проектов могут не иметь смысла в нашем мире. Большое спасибо за вклад, это очень полезно. – tytchong

+1

5. Вы можете использовать блокировки файлов, введенные в Java 1.4. – EJP

0

все они на уровне резьбы?

Это правильно, synchronized и т. Д. Работают только в контексте одного процесса.

Обеспечивает ли Java поддержку IPC, например, семафоров между процессами?

Одним из способов реализации связи между процессами Java является использование RMI.

+0

Спасибо, я посмотрю RMI. – tytchong

7

Ключевое слово, замки, атомные объекты и т. Д. Можно использовать , но они локальны для JVM. Поэтому, если у вас есть две JVM, запускающие одну и ту же программу, они все равно могут, например, одновременно запускайте один и тот же метод synchronized - по одному на каждую JVM, но не более.

Решения:

  • обеспечивает распределенную замок

  • а

  • вы можете использовать синхронизацию вручную в файловой системе или базе данных

+0

Большое спасибо за ваши комментарии. – tytchong

0

I га ve реализовала реализацию java IPC Lock с использованием файлов: FileBasedLock и реализацию IPC-семафора с использованием общего DB (jdbc): JdbcSemaphore.Обе реализации являются частью spf4j.

Если у вас есть взять экземпляр зоопарка взглянуть на рецептах блокировки на основе Zookeeper от Apache Curator

0

Я использую distributed lock предоставленный Redisson синхронизировать работу различных виртуальных машин