2010-07-21 27 views
7

tengo una gran matriz que se accede por hilo múltiple. El bloqueo simple no es lo suficientemente eficiente. ¿Hay una clase de bloqueo de rango en java o scala?bloqueo gama en java

+0

si la matriz solo se accede y no se modifica, entonces no necesita ningún tipo de bloqueo. (suponiendo que la matriz está completamente poblada antes de que los hilos comiencen a leerse, para garantizar que se publiquen los cambios iniciales). – mdma

Respuesta

1

Envuelva la matriz dentro de un objeto seguro para hilos que controle el acceso. Puede administrar los rangos usted mismo, o dividir el conjunto en rangos, cada uno con su propio candado, y hacer referencia de esa manera.

6

No en las bibliotecas estándar. ConcurrentHashMap hace esto, sin embargo, que representa internamente la tabla hash como "segmentos" (16 de ellos de forma predeterminada) donde cada uno está protegido con un bloqueo separado. Además, this thread hace la misma pregunta, excepto sobre un ArrayList en lugar de una matriz. Aunque infructuoso, trae alternativas si puede comprometer el uso.

Actualización: Tal vez AtomicReferenceArrayandfriends proporcionaría la eficiencia que está buscando, mientras que al mismo tiempo "dar [] a la semántica de acceso volátiles a los elementos de la matriz" (JCIP 15.3).

2

En términos generales, excepto si tiene una necesidad realmente específica en términos de concurrencia, encontrará objetos muy optimizados y convenientes en el paquete java.util.concurrent de jdk.

puedo sugerir "Java concurrencia en la práctica" de Brian Goetz, un libro muy bueno que explica muchas cosas sobre el hilo en Java y java.util.concurrent paquete también.

0

Realmente depende de su uso. Si realmente quiere decir ArrayList y no solo una matriz, entonces probablemente tendrá que hacer las suyas propias y rayar sus bloqueos, ya que ArrayLists puede cambiar el tamaño, lo que realmente puede arruinar las lecturas y escrituras no sincronizadas.

Sin embargo, en realidad se refiere a una matriz , no estoy seguro de entender lo que quiere decir. No necesita un candado, las cosas funcionarán bien sin candados. Otro hilo puede no ver un cambio de inmediato, pero ese no es el fin del mundo.