Sincronizar el acceso a HashMap desde dos subprocesos en java
Tengo dos hilos de ejecución (uno es el hilo principal (Say Thread1
) y otro es el hilo de fondo (por ejemplo, Thread2
)). Puedo tener acceso a la variable hashMap
de HashMap
de Thread1
y Thread2
. Thread1
modifica el hashMap
y Thread2 lee el HashMap.
En el código Thread1
será:
- La aplicación puede estar haciendo demasiado trabajo en su hilo principal
- Cómo ejecutar un hilo Runnable en Android?
- ¿Debo hacer `Thread.currentThread (). Interrupt ()` before `throw new InterruptedIOException ()`?
- Mi clase AsyncTask tiene otros subprocesos en él. ¿Cómo puedo esperar a que termine con todos sus subprocesos antes de ejecutar un método siguiente?
- ¿Cómo textView.setText de hilo?
synchronized(hashMap){ //updating hashMap }
En el código de Thread2 será:
synchronized(hashMap){ //reading hashMap }
¿Puedo sincronizar el acceso a hashMap
usando synchronized block
de esta manera?
- Cómo actualizar la vista de imagen inmediatamente
- ¿Necesitamos usar el hilo de fondo para recuperar datos usando firebase?
- Cuando está fuera del hilo principal, ¿cómo puedo obtener algún código para ejecutarse en el hilo principal lo más rápido posible?
- Android gestión de hilos onPause
- ¿Cuál es la diferencia entre Handler, Runnable y Threads?
- Progressdialog lento para mostrar en Android
- ¿Una manera fácil de detectar dónde se está bloqueando el hilo de ui en Android?
- ¿Los hilos añaden mucha sobrecarga a una aplicación?
Sí. Pero también puedes usar el método de utilidad Collections.synchronizedMap para hacer un thread hashmap seguro:
Map yourMap = new HashMap(); Map synchronizedMap = java.util.Collections.synchronizedMap(yourMap);
O puede utilizar ConcurrentHashMap o Hashtable que son thread-safe de forma predeterminada.
Yo usaría ReadWriteLock
ReadWriteLock rwl = new ReentrantReadWriteLock(); void read() { rwl.readLock().lock(); try { ... read } finally { rwl.readLock().unlock(); } } void write() { rwl.writeLock().lock(); try { ... write } finally { rwl.writeLock().unlock(); } }
Debe intentar usar HashTable
o ConcurrentHashMap
. Ambas clases están sincronizadas para que usted no tenga que lidiar con usted mismo. Y no creo que se puede utilizar la palabra clave synchronized
directamente en un objeto específico. Se utiliza normalmente con .class
o this
, es decir, el tipo de clase.
- ¿Cómo puedo tomar una captura de pantalla de un video, en android
- ¿Cómo elegir Actividad o Fragmento si ambos escenarios son posibles?