Java Array lista sincronización si está escrito en un hilo y leído en otro
Tengo una clase de controlador que se ejecuta en el hilo A y compone una lista de variables locales como este
Hilo
- Cómo obtener la posición de clic en onClickListener?
- Google Maps Android API v2 ClassNotFound Error de tiempo de ejecución
- Java montón espacio
- Desafortunadamente MyApp se ha detenido. ¿Como puedo resolver esto?
- Lectura de un archivo de texto o de un archivo XML en Android java
list = new ArrayList<Map<String, Order>>(); list.add(...); list.add(...);
donde Order es un java con varias propiedades primitivas como String, int, long, etc.
Una vez construida esta lista, su referencia se pasa a un hilo de UI (hilo B) de Actividad y se accede allí. La comunicación entre hilos se realiza mediante un método Handler class + post ().
Así que la pregunta es, ¿puedo acceder a los datos de la lista del hilo B sin sincronización en absoluto? Tenga en cuenta que, después de haber sido construido en el hilo A, no se accederá / modificará la lista en absoluto. Simplemente existe como una variable local y se pasa al hilo B después.
- Cómo elegir el tamaño de la agrupación de hilos en android
- Android - MediaPlayer's en Preparado Llamado incluso antes de que el flujo se prepare en Android 4.0+
- Agregar un círculo de cuadro redondo en mapa de bits redondeado
- OnPageSelected nunca se llama para el primer elemento?
- Video streaming usando NanoHttpd, Error: java.net.SocketException: sendto failed: EPIPE (Broken pipe)
- ¿Cómo encontrar el nombre del país desde el nombre de la ciudad en Java?
- Acciones en onActivityResult y "Error No se puede realizar esta acción después de onSaveInstanceState"
- Autocompletar en android - para la búsqueda de youtube
No está claro del contexto que usted proporciona que dónde sucede esto:
list = new ArrayList<Map<String, Order>>(); list.add(...); list.add(...);
Si está en un constructor y la list
es final
y this
referencia no se filtra desde el constructor y está absolutamente seguro de que la list
no cambiará (por ejemplo, utilizando el método unmodifiableList
decorator) y las referencias a las instancias Order
no son accesible desde cualquier lugar que no sea adecuado para no utilizar la sincronización. De lo contrario, tendrá Espada de Damocles sobre su cabeza.
He mencionado las referencias de la Order
porque no puede obtener excepciones si las cambia desde otro lugar, pero puede conducir a la inconsistencia / corrupción de los datos.
Es seguro. La sincronización realizada en la cola de mensajes establece una relación de sucede-antes. Esto por supuesto asume que usted no modifica los mapas después. También cualquier objeto contenido en los mapas, y así sucesivamente no debe ser modificado por otros hilos sin la sincronización apropiada.
En resumen, si la lista y ninguno de los datos dentro de ella no son modificados por otros subprocesos que B, no necesita ninguna sincronización adicional.
Si puede garantizar que la lista no se modificará, entonces no necesita sincronización ya que todos los hilos siempre verán la misma Lista.
Sí, no hay necesidad de sincronizar si sólo va a leer los datos.
Tenga en cuenta que incluso si el subproceso A va a modificar eventualmente la lista mientras que el subproceso B (o cualquier otro número de subprocesos) está accediendo a él, todavía no tiene que sincronizar porque sólo hay un escritor en un momento dado.
Lo sentimos, la declaración anterior no es completamente correcta. Como se indica en el JavaDoc:
Si varios subprocesos tienen acceso simultáneamente a una instancia de ArrayList y al menos uno de los subprocesos modifica la lista estructuralmente, debe sincronizarse externamente. (Una modificación estructural es cualquier operación que añade o elimina uno o más elementos, o redimensiona explícitamente la matriz de respaldo, simplemente establecer el valor de un elemento no es una modificación estructural ).
También tenga en cuenta que no estoy teniendo en cuenta la modificación de elementos, sino simplemente modificaciones de lista.
- Unity 4.2 Android en la aplicación de facturación: la firma de verificación ha fallado
- Pestañas de Acción