Capacitación en Java de Beida Jade Bird: ¿Análisis de seguridad de subprocesos?
Hoy, la Facultad de Computación Jade Bird Liaoning de la Universidad de Pekín le brindará una explicación sencilla y una introducción sobre la seguridad de los hilos. vamos a ver.
La seguridad de subprocesos se refiere al uso de un mecanismo de bloqueo cuando acceden varios subprocesos. Cuando un hilo accede a ciertos datos de esta clase, está protegido y otros hilos no pueden acceder a él hasta que este hilo haya terminado de leerlo.
No habrá inconsistencia ni contaminación de datos.
Subproceso inseguro significa que no se proporciona protección de acceso a datos y varios subprocesos pueden cambiar datos uno tras otro, lo que genera datos sucios.
Cuándo considerar la seguridad de subprocesos: si un objeto necesita ser seguro para subprocesos depende de si varios subprocesos acceden al objeto.
Esto se refiere a la forma en que se accede al objeto en el programa, no a la función que implementará el objeto.
Para que un objeto sea seguro para subprocesos, se debe utilizar un mecanismo de sincronización para coordinar el acceso al estado mutable del objeto.
El mecanismo de sincronización comúnmente utilizado en Java es Sincronizado, que también incluye variables de tipo volátil, bloqueos de visualización y variables atómicas.
En subprocesos múltiples, cuando se accede a la misma clase al mismo tiempo, los resultados de cada ejecución son los mismos que en un solo subproceso y los valores de las variables son los mismos que se esperaban, por lo que esta clase es segura para subprocesos.
Características del bloqueo Dos características del mecanismo de bloqueo: Exclusión mutua: es decir, solo un hilo puede mantener el bloqueo de un objeto al mismo tiempo. El mecanismo de coordinación en subprocesos múltiples se realiza a través de esto. característica, de modo que al mismo tiempo Solo un hilo accede a un bloque de código que requiere sincronización (operación compuesta).
Exclusión mutua, solemos llamarla atomicidad de las operaciones.
Visibilidad: debe asegurarse de que las modificaciones realizadas en la variable compartida antes de liberar el bloqueo sean visibles para otro subproceso que posteriormente adquiera el bloqueo; de lo contrario, el otro subproceso puede continuar operando en las copias de la caché local, lo que resultará en en inconsistencias.
Suspensión, suspensión, bloqueo y no bloqueo: cuando un subproceso se cuelga, pierde tiempo de uso de la CPU hasta que otros subprocesos lo despiertan (subprocesos de usuario o subprocesos de depuración).
Hibernación: También perderá tiempo de uso de la CPU, pero se activará automáticamente después del tiempo de suspensión especificado y no es necesario despertarlo (todo el despertar parece automático, pero en realidad debe haber un demonio). hilo para activarse, y no se necesita ningún programador (solo intervención manual).
Bloqueo: Cuando el hilo se está ejecutando, no se pueden obtener los recursos requeridos, por lo que el hilo se suspende hasta que se cumplan las condiciones de ejecución.
Sin bloqueo: cuando el hilo se está ejecutando, no puede obtener los recursos necesarios, por lo que el hilo no se suspende y espera, sino que continúa realizando otras cosas. Una vez que se cumpla la condición de espera, se le notificará antes de ejecutarse (el hilo del demonio hará lo mismo).