Colección de citas famosas - Colección de consignas - ¿Análisis de seguridad de subprocesos?

¿Análisis de seguridad de subprocesos?

En el proceso de aprendizaje del lenguaje de programación Java, hemos dominado conocimientos técnicos relevantes, como subprocesos y grupos de subprocesos. Hoy, la Facultad de Ciencias de la Computación Jade Bird Huoying de la Universidad de Pekín le brindará una breve introducción a 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 subproceso accede a algunos datos de esta clase, los datos están protegidos y otros subprocesos no pueden acceder a ellos hasta que ese subproceso complete la lectura. No habrá inconsistencia ni contaminación de datos.

No seguro para subprocesos significa que no se proporciona protección de acceso a los datos y es posible que varios subprocesos cambien datos continuamente, lo que genera datos sucios.

Cuándo considerar la seguridad de subprocesos:

La necesidad de que un objeto sea 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 lo que se supone que debe hacer el objeto. Para hacer que un objeto sea seguro para subprocesos, se debe emplear 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 acceden 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 los esperados, por lo que la clase es segura para subprocesos.

Características de las cerraduras

Dos características del mecanismo de cerradura:

Exclusión mutua: solo se permite que un hilo mantenga la cerradura de un objeto al mismo tiempo. . A través de esta característica, se implementa el mecanismo de coordinación en subprocesos múltiples, de modo que solo un subproceso accede al bloque de código que se sincronizará (operación compuesta) al mismo tiempo. Exclusión mutua, a menudo la llamamos 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 almacenando en caché el local. La operación se realiza en la copia, lo que resulta en inconsistencia.

Pausa, suspensión, bloqueo y no bloqueo

Suspensión: Cuando un hilo se suspende, perderá tiempo de uso de CPU hasta que sea utilizado por otros hilos (hilos de usuario o hilos de depuración). ) despertar.

Hibernación: también perderá tiempo de uso de la CPU, pero se activará automáticamente después del tiempo de suspensión especificado sin despertarse (todo el despertar parece ser automático, pero en realidad debe haber un demonio hilo para activarse, pero no requiere intervención manual por parte del programador).

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 operación.

Sin bloqueo: cuando el hilo se está ejecutando, no se pueden obtener los recursos requeridos, por lo que el hilo no se cuelga esperando, 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).