usar restricción métodos modificador metodos metodo estáticos estaticos diferencia cuando clase atributos java multithreading core

modificador - restricción de java al usar atributos y métodos estáticos.



¿Cuál es el uso del método sincronizado estático en java? (3)

En el tiempo de ejecución, cada clase tiene una instancia de un objeto de Class . Ese es el objeto que está bloqueado por métodos static synchronized . (Cualquier método o bloque sincronizado debe bloquearse en algún objeto).

También puede sincronizar este objeto manualmente si lo desea (ya sea en un método estático o no). Estos dos métodos se comportan de manera idéntica:

class Foo { static synchronized void methodA() { // ... } static void methodB() { synchronized (Foo.class) { // ... } } }

Tengo una pregunta en mi mente, leí el método sincronizado estático bloqueado en el objeto de clase y los métodos sincronizados en la instancia actual de un objeto. Entonces, ¿cuál es el significado de bloqueado en el objeto de clase?

¿Alguien por favor me puede ayudar en este tema?


En palabras simples, un método static synchronized bloqueará la clase en lugar del objeto, y bloqueará la clase porque la palabra clave static significa: "clase en lugar de instancia".

La palabra clave synchronized significa que solo un hilo puede acceder al método a la vez.
Y media static synchronized :

Solo un hilo puede acceder a la clase a la vez.


En general, synchronized métodos synchronized se utilizan para proteger el acceso a los recursos a los que se accede simultáneamente. Cuando un recurso al que se accede simultáneamente pertenece a cada instancia de su clase, utiliza un método de instancia synchronized ; cuando el recurso pertenece a todas las instancias (es decir, cuando se encuentra en una variable static ), se usa un método synchronized static para acceder a él.

Por ejemplo, podría hacer un método de fábrica static que mantenga un "registro" de todos los objetos que ha producido. Un lugar natural para tal registro sería una colección static . Si su fábrica se usa desde varios subprocesos, debe synchronized método de fábrica (o tener un bloque synchronized dentro del método) para proteger el acceso a la colección static compartida.

Tenga en cuenta que el uso synchronized sin un objeto de bloqueo específico generalmente no es la opción más segura cuando está construyendo una biblioteca para ser usada en un código escrito por otros. Esto se debe a que el código malintencionado podría sincronizarse en su objeto o en una clase para bloquear la ejecución de sus propios métodos. Para proteger su código contra esto, cree un objeto privado de "bloqueo", instancia o estática, y sincronícelo en ese objeto.