Cómo lograr la seguridad de los subprocesos
Pregunta 1: ¿Qué es la seguridad de los subprocesos? ¿Cuáles son los métodos para lograr la seguridad de los subprocesos? Tomé algunas notas cuando estaba estudiando. Espero que te sean útiles.
Cuándo. una clase está bien sincronizada Para proteger sus datos, esta clase se llama "segura para subprocesos" --- No estoy divagando...
5. Sincronización de subprocesos y punto muerto
1. ¿Qué es la sincronización?
Utilice la palabra clave sincronizada para identificar métodos o bloques de código para limitar las operaciones de subprocesos en sus contenidos (consulte los detalles de sincronización).
2. Por qué es necesaria la sincronización p>
Java permite el control de concurrencia de subprocesos múltiples Cuando varios subprocesos operan una variable de recurso compartible al mismo tiempo (como agregar, eliminar, modificar y verificar datos),
dará lugar a resultados inexactos. datos e interferencia mutua, por lo que se agrega un bloqueo de sincronización para evitar que otros subprocesos lo llamen antes de que el subproceso complete la operación.
Esto garantiza la unicidad y precisión de la variable. /p>
3. Formato de sincronización
Bloque de código sincronizado
sincronizado (objeto de hilo sincronizado){
Bloque de código que debe sincronizarse <; /p>
}
Método sincronizado
sincronizado Otros modificadores de acceso valor de retorno nombre del método (){
Contenido del método
}
p>(sincronizado también puede modificar métodos estáticos. Si se llama al método estático en este momento, toda la clase se bloqueará)
4. ¿Qué es el punto muerto?
Deadlock Es la abreviatura de interbloqueo de procesos, que se refiere a una situación en la que múltiples procesos esperan en un bucle los recursos ocupados entre sí y permanecen en un punto muerto indefinidamente. Es uno de los problemas más difíciles de tratar en los sistemas operativos de las computadoras e incluso en la programación concurrente.
Solución al punto muerto
(Para obtener una introducción detallada al punto muerto, consulte Bloqueo de procesos y soluciones. docx)
5. Notas
1. La sincronización es una operación de alto costo, por lo que el contenido de la sincronización debe reducirse tanto como sea posible.
Por lo general, no es necesario sincronizar todo el método, solo use bloques de código sincronizados para sincronizar el código clave.
Pregunta 2: Cómo hacer que los campos Java seguros para subprocesos se modifiquen con final, a menos que se necesiten cambios
Las variables están protegidas por bloqueos y un grupo de variables que son invariantes deben usar el mismo bloqueo
Mantenga los bloqueos en operaciones combinadas complejas
Documente su estrategia de sincronización
Eso es todo. También puede usar la palabra clave sincronizada en Java. utilice muchas clases proporcionadas en el paquete de concurrencia para completar operaciones seguras para subprocesos
Pregunta 3: ¿Qué es la seguridad de subprocesos? ¿Cómo lograr la seguridad de subprocesos si cada subproceso solo tiene operaciones de lectura en variables globales y variables estáticas? Sin operaciones de escritura, esta variable global es segura para subprocesos; si varios subprocesos realizan operaciones de escritura al mismo tiempo, generalmente se debe considerar la sincronización de subprocesos; de lo contrario, la seguridad de los subprocesos puede verse afectada. La seguridad de subprocesos significa que cuando acceden varios subprocesos, se adopta un mecanismo de bloqueo. Cuando un subproceso accede a ciertos datos de esta clase, está protegido y otros subprocesos no pueden acceder a ellos hasta que el subproceso haya terminado de leer, y luego otros subprocesos pueden usarlo. No habrá inconsistencia ni contaminación de datos.
La inseguridad de los subprocesos significa que no se proporciona protección de acceso a los datos. Es posible que varios subprocesos cambien los datos sucesivamente, lo que hace que los datos obtenidos sean datos sucios.
Pregunta 4: Cómo implementar un mapa HashMap seguro para subprocesos. m = Collections.synchronizedMap( new HashMap());
Eso es todo
Pregunta 5: ¿Cómo implementa Java una cola segura para subprocesos? La clase java.util.concurrent ConcurrentLinkedQueue proporciona una cola eficiente, escalable y segura para subprocesos. Cola FIFO segura y sin bloqueo.
Consulte la documentación de la API de jdk5 o 6, que ya se ha implementado.
Pregunta 6: Cómo resolver el problema de seguridad de subprocesos.
La primera es utilizar variables atómicas. Después de todo, los problemas de seguridad de los subprocesos son causados fundamentalmente por variables globales y variables estáticas, siempre que se garantice que la operación de escritura de la variable sea de escritura completa o no. Al escribir, se puede resolver la seguridad de los subprocesos, use sig_atomic_t y volatile para definir variables.
El segundo es lograr la sincronización entre hilos, utilizando mutexes y semáforos. Simplemente permita que los subprocesos accedan a las variables de manera ordenada
Pregunta 7: ¿Cómo lograr la seguridad de los subprocesos en threadlocal? La clase Character contiene algunos métodos estáticos que se pueden usar para procesar variables char. Estos métodos incluyen isDigit(). , isLetter(), isWhitespace () y toUpperCase().
Los valores de caracteres no tienen signo.
Pregunta 8: Cómo crear una lista segura para subprocesos. Generalmente hay dos formas de resolver este problema (en mi opinión personal)
Una: usar la palabra clave sincronizada, que es para todos. debe estar familiarizado con él.
2: Utilice Collections.synchronizedList(); el método de uso es el siguiente:
Si el código que crea es el siguiente: Listgt; =new ArrayListgt ();
p>
Luego, para resolver este problema de seguridad de subprocesos, puede utilizar Collections.synchronizedList(), como por ejemplo:
Listgt; =Collections.synchronizedList(new ArrayListgt; ());
Nada más ha cambiado y el método utilizado es casi el mismo que ArrayList. Puede consultar la documentación de la API; Hablemos de ArrayList y LinkedList; ambas son implementaciones de la interfaz List. El uso es el mismo, pero el lugar de uso es ligeramente diferente. ArrayList es adecuado para realizar una gran cantidad de accesos aleatorios. para usar al insertar y eliminar en la tabla. Ambos no son seguros para subprocesos. La solución es la misma que la anterior (para evitar la seguridad de subprocesos, el método anterior, especialmente el segundo, en realidad consume mucho rendimiento).
Pregunta 9: ¿Cómo lograr la seguridad de subprocesos en los servlets? ¿Se necesitan servlets para el desarrollo web? Debe crear un nuevo servlet en eclipse. Su eclipse primero debe admitir el desarrollo web.
Pregunta 10: ¿Cómo logra Java la seguridad de los subprocesos? La diferencia entre sincronización y bloqueo es equivalente a hacer cola,
el bloqueo es equivalente a esperar.