¿Cómo ArrayList, LinkedList y HashMap garantizan la seguridad de múltiples subprocesos?

La sincronización de subprocesos se refiere a la coordinación de múltiples subprocesos, definiendo cómo múltiples subprocesos acceden a recursos específicos y evitando el problema de la inconsistencia de datos causada por el acceso concurrente de múltiples subprocesos. ArrayList, LinkkedList y HashMap son las estructuras de datos más utilizadas, pero no son seguras para subprocesos. En un escenario de subprocesos múltiples, si no se realiza el control, puede causar problemas de seguridad de subprocesos.

Método de seguridad de subprocesos Solve ArrayList, LinkedList

1. Herede Arraylist y, a continuación, vuelva a escribir o escriba sus propios métodos según sea necesario. Estos métodos deben escribirse sincronizados y llamar al método ArrayList en estos métodos sincronizados.

2. Use Collections.synchronizedList (); El método de uso es el siguiente:

假如你创建的代码如下:List<Map<String,Object>> data=new ArrayList<Map<String,Object>>();

那么为了解决这个线程安全问题你可以这么使用Collections.synchronizedList(),如:

List<Map<String,Object>> data=Collections.synchronizedList(new ArrayList<Map<String,Object>>());

Nada más ha cambiado y el método utilizado es casi el mismo que ArrayList. Puede consultar el documento api;

Además, hablemos de ArrayList y LinkedList; estas dos son implementaciones de la interfaz List. El uso es el mismo, pero el lugar de uso es un poco diferente. ArrayList es adecuado para una gran cantidad de accesos aleatorios y LinkedList es adecuado para su uso en una tabla. Úselo al insertar y eliminar, los cuales no son seguros para subprocesos, y la solución es la misma que la anterior (para evitar la seguridad de subprocesos, el método anterior, especialmente el segundo método, en realidad pierde mucho rendimiento).

Resuelva el método de seguridad de subprocesos HashMap
1. Herede HashMap, reescriba o escriba sus propios métodos según sea necesario, estos métodos deben escribirse como sincronizados, llame al método de HashMap en estos métodos sincronizados
2. Use Collections.synchronizedMap ()
3. Use ConcurrentHashMap en su lugar, No se recomienda que el código nuevo use Hashtable. HashTable hereda de Dictionary. Solo un hilo puede escribir Hashtable en cualquier momento. El rendimiento simultáneo no es tan bueno como ConcurrentHashMap porque ConcurrentHashMap introduce bloqueos de segmento. Use HashMap en escenarios donde no se requiera seguridad para subprocesos y reemplace ConcurrentHashMap en escenarios donde se requiera seguridad para subprocesos.

Supongo que te gusta

Origin blog.csdn.net/u011582840/article/details/107480825
Recomendado
Clasificación