Tengo una pregunta relacionada con los hilos de java.Sincronización de subprocesos de Java, la mejor utilidad concurrente, operación de lectura
Para tomar un ejemplo muy simple, digamos que tengo 2 hilos.
Tema Un ejemplo StockReader clase en curso
Tema B instancia en ejecución StockAvgDataCollector Clase
En Tema B, StockAvgDataCollector recoge algunos mercados de datos de forma continua, hace algo pesada promedio/manipulación y actualiza una variable miembro spAvgData
En el subproceso Un StockReader tiene acceso a la instancia StockAvgDataCollector y su miembro spAvgData utilizando el método getspAvgData().
Por lo tanto, el subproceso A solo funciona con READ y el subproceso B realiza operaciones de LEER/ESCRIBIR.
Preguntas
Ahora, ¿necesito la sincronización o la funcionalidad atómica o de bloqueo o cualquier material relacionado con la concurrencia en este escenario? No importa si el hilo A lee un valor anterior.
Como el hilo A solo va a READ y no actualiza nada y solo el hilo B realiza operaciones de ESCRITURA, ¿habrá situaciones de estancamiento?
He pegado un párrafo a continuación en el siguiente enlace. A partir de ese párrafo, parece que necesito preocuparme por algún tipo de bloqueo/sincronización.
http://java.sun.com/developer/technicalArticles/J2SE/concurrency/
Cerraduras lector/grabador
Cuando se utiliza un hilo para leer datos de un objeto, que no necesariamente tienen que evitar que otro hilo de la lectura de datos al mismo tiempo. Siempre que los hilos solo lean y no cambien datos, no hay razón por la cual no puedan leer en paralelo. El paquete J2SE 5.0 java.util.concurrent.locks proporciona clases que implementan este tipo de bloqueo. La interfaz ReadWriteLock mantiene un par de bloqueos asociados, uno para solo lectura y otro para escritura. El readLock() puede ser retenido simultáneamente por múltiples cadenas de lectores, siempre que no haya escritores. El writeLock() es exclusivo. Si bien, en teoría, está claro que el uso de bloqueos lector/escritor para aumentar la concurrencia conduce a mejoras en el rendimiento sobre el uso de un bloqueo de exclusión mutua. Sin embargo, esta mejora en el rendimiento solo se realizará completamente en un multiprocesador y la frecuencia con que se leen los datos en comparación con la modificación, así como la duración de las operaciones de lectura y escritura.
¿Qué utilidad concurrente sería menos costosa y adecuada en mi ejemplo?
java.util.concurrent.atomic?
java.util.concurrent.locks?
java.util.concurrent.ConcurrentLinkedQueue? - En este caso, StockAvgDataCollector se agregará y StockReader se eliminará. No se expondrá el método getpAvgData().
Gracias Amit
Lo siento, no era consciente. Acabo de aceptar todas mis preguntas anteriores. Gracias por mencionarlo. – FatherFigure