que - ¿Qué es el hilo seguro en java?
que es un hilo en java (2)
Posible duplicado:
¿Qué significa threadsafe?
Estoy muy confundido de que cualquier clase es Hilo seguro. Entiendo que, si alguna clase es segura para subprocesos, tiene algunos específicos en sus métodos (como sincronizados). ¿Es correcto o incorrecto? Por favor, ayúdame elaborando el significado de esto.
Como Seth declaró seguro para subprocesos significa que un método o instancia de clase puede ser usado por múltiples subprocesos al mismo tiempo sin que ocurran problemas.
Considere el siguiente método:
private int myInt = 0;
public int AddOne()
{
int tmp = myInt;
tmp = tmp + 1;
myInt = tmp;
return tmp;
}
Ahora el hilo A
y el hilo B
AddOne()
ejecutar AddOne()
. pero A
comienza primero y lee el valor de myInt (0)
en tmp
. Ahora, por alguna razón, el programador decide detener el hilo A
y aplazar la ejecución al hilo B
El subproceso B
ahora también lee el valor de myInt
(aún 0
) en su propia variable tmp
. El subproceso B
finaliza todo el método, por lo que al final myInt = 1
. Y se devuelve 1
. Ahora es el turno del hilo A
nuevo. El hilo A
continúa. Y agrega 1
a tmp
( tmp
era 0
para el hilo A
). Y luego guarda este valor en myInt
. myInt
es de nuevo 1
.
Entonces, en este caso, el método AddOne()
se llamó dos veces, pero como el método no se implementó de una manera segura para subprocesos, el valor de myInt
no es 2
, como se esperaba, sino 1
porque el segundo subproceso leyó la variable myInt
antes del primero el hilo terminó de actualizarlo.
Crear métodos seguros para subprocesos es muy difícil en casos no triviales. Y hay bastantes técnicas. En Java puede marcar un método como sincronizado , esto significa que solo un hilo puede ejecutar ese método en un momento dado. Los otros hilos esperan en linea. Esto hace que un subproceso del método sea seguro, pero si hay mucho trabajo por hacer en un método, entonces se pierde mucho tiempo. Otra técnica es "marcar solo una pequeña parte de un método como sincronizado" mediante la creación de un bloqueo o un semáforo, y el bloqueo de esta pequeña parte (generalmente llamada la sección crítica). Incluso hay algunos métodos que se implementan como seguros para subprocesos sin bloqueo, lo que significa que están construidos de tal manera que múltiples subprocesos pueden correr a través de ellos al mismo tiempo sin causar problemas, esto puede ser el caso cuando un método solo ejecuta uno. llamada atómica. Las llamadas atómicas son llamadas que no pueden interrumpirse y solo pueden ser realizadas por un hilo a la vez.
La seguridad de subprocesos simplemente significa que se puede usar desde varios subprocesos al mismo tiempo sin causar problemas. Esto puede significar que el acceso a cualquier recurso está sincronizado, o lo que sea.