2012-05-16 25 views
10

El proyecto en el que estoy trabajando activaría varios trabajos asíncronos para hacer algún trabajo. A medida que lo veo más, estos trabajos asíncronos se están ejecutando como JVM separadas (procesos java separados). ¿Quiere decir que no sería capaz de utilizar cualquiera de los siguientes si necesito sincronizar entre estos procesos:Sincronización de Java entre diferentes JVM

  • sincronizados métodos/bloques
  • cualquier cerradura que implementa java.util.concurrent.locks

Debido a que parece para mí, todos son de nivel de subprocesos?

¿Proporciona Java soporte para IPC como semáforos entre procesos?

Respuesta

10

Correcto. No puede usar ningún mecanismo de sincronización estándar porque están trabajando en una JVM.

Soluciones

  1. Puede utilizar bloqueos de archivos introducidos en Java 7.
  2. Puede utilizar la sincronización a través de entidades de base de datos.
  3. Una de las soluciones ya implementadas como Terracota puede ser útil
  4. Vuelva a pensar su diseño. Si eres principiante en el mundo java intenta hablar en detalle con ingenieros más experimentados. Su pregunta muestra que en mi humilde opinión simplemente está en el camino equivocado.
+0

Gracias! Estamos reutilizando la misma arquitectura de un proyecto diferente, por lo que algunos de los diseños podrían no tener sentido en nuestro mundo. Muchas gracias por la entrada, esto es muy útil. – tytchong

+1

5. Puede usar los bloqueos de archivos introducidos en Java 1.4. – EJP

0

son todos a nivel de hilo?

Eso es correcto, synchronized etc. solo funcionan en el contexto de un solo proceso.

¿Proporciona Java soporte para IPC como semáforos entre procesos?

Una forma de implementar la comunicación entre procesos Java es utilizando RMI.

+0

Gracias voy a mirar en RMI. – tytchong

7

Puede usar synchronized palabra clave, bloqueos, objetos atómicos, etc., pero son locales para la JVM. Entonces, si tiene dos JVM que ejecutan el mismo programa, todavía pueden, p. ejecute el mismo método synchronized al mismo tiempo, uno en cada JVM, pero no más.

Soluciones:

  • ofrece distribuidos bloqueo

  • así

  • puede utilizar la sincronización manual de sistema de archivos o base de datos

+0

Muchas gracias por sus comentarios. – tytchong

0

I ha Hemos implementado una implementación java IPC Lock usando los archivos: FileBasedLock y una implementación de semáforo IPC usando una base de datos compartida (jdbc): JdbcSemaphore.Ambas implementaciones son parte de spf4j.

Si tiene una instancia de empleado del zoológico echar un vistazo a las recetas de bloqueo basadas Zookeeper de Apache Curator

Cuestiones relacionadas