Pregunta

Estoy escribiendo un multi-threaded solución en Java para conectar dos sistemas a y B.Sistema está completamente de serie, no de rosca, y el suministro de datos a enviar al sistema B.Sistema B acepta datos de múltiples fuentes de forma asincrónica, todo al mismo tiempo.

Estoy usando ThreadPoolExecutor para manejar los hilos.Estoy utilizando un estático singleton instancia de una clase, TP, que se envuelve alrededor de ThreadPoolExecutor (que también es estático) porque el sistema no puede crear nuevos objetos, pero se puede hacer llamadas a los objetos estáticos.

Aquí es donde estoy atascado.Estoy haciendo algunos muy básicos de las pruebas de la instalación antes de ir a por todas.He creado dos clases de pruebas, T1 & T2.Cada una de estas clases importa la clase TP (donde la estática singleton es creado).T1 añade algunos objetos para el TP de la cola y, a continuación, T2, añade un poco más.

Aunque el TP objeto es declarado como static, parece que hay dos versiones que se ejecutan en paralelo.Los objetos presentados a la cola en la T2 se ejecutan antes de que el objeto presentado por T1, todos han sido ejecutados.También, ya que ni T1 o T2 llamadas shutdown() en el ThreadPoolExector, ambos de colgar y nunca terminar.

¿Cómo puedo crear un demonio instancia estática de una banda de rodadura que, básicamente, se despierta cada vez que tengo que enviar algo para ser procesados, incluso de diferentes Java ejecutables?

¿Fue útil?

Solución

Si está ejecutando dos procesos separados, entonces tienes dos tipos independientes y dos instancias separadas, independientemente de si es un singleton.

Si lo que quieres son dos procesos diferentes para hablar el uno al otro, tendrá que abordar esa cuestión en forma completamente independiente.Hay un montón de diferentes mecanismos IPC disponibles de redes, canalizaciones con nombre (difícil de Java IIRC), los archivos asignados en memoria, un simple directorio compartido donde un proceso de lugares tareas para el otro proceso, etc.

También no está claro exactamente lo que cuelga, o cómo su hilo-piscina está configurado.Si el problema realmente es el roscado de lado (más que el IPC lado), por favor, después de una breve pero completa programa que muestra el problema.

Otros consejos

Si el tamaño de la agrupación de hebras es mayor que 1, entonces no hay garantía de que todos los objetos T1 serán procesadas primero.

Me suena como que está ejecutando dos 'principales' clases diferentes que cada utilizar esta misma clase de singleton estático. En ese caso, habrá dos instancias del singleton creado - uno en cada JVM.

Creo que lo que quiere hacer es tener el grupo de subprocesos encapsulado en otro proceso que se ejecuta como un servicio y expone a algún mecanismo para IPC como Skeet ha comentado. Una forma común de hacer esto sería exponer una cola JMS para recibir las solicitudes de diferentes productores y tienen el consumidor (el demonio) despachar las solicitudes que recibe a la agrupación de hebras para su procesamiento.

Para la ejecución de este servicio como un demonio, puede alojarlo en un contenedor o usar algo como el Java Service Wrapper si se está ejecutando en Windows.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top