Saltar al contenido

Cuál es el uso de static método sincronizado en java?

Bienvenido a nuestro sitio, en este sitio vas a encontrar la respuesta a lo que buscabas.

Solución:

En general, synchronized Los métodos 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 synchronized método de instancia; cuando el recurso pertenece a todas las instancias (es decir, cuando está en un static variable) entonces usas una synchronized static método para acceder a él.

Por ejemplo, podrías hacer un static método de fábrica que mantiene un “registro” de todos los objetos que ha producido. Un lugar natural para dicho registro sería un static recopilación. Si su fábrica se usa desde múltiples subprocesos, debe hacer el método de fábrica synchronized (o tener un synchronized bloque dentro del método) para proteger el acceso a la compartida static recopilación.

Tenga en cuenta que usando synchronized sin un objeto de bloqueo específico generalmente no es la opción más segura cuando está creando una biblioteca para usarla en el código escrito por otros. Esto se debe a que el código malicioso podría sincronizarse en su objeto o una clase para bloquear la ejecución de sus propios métodos. Para proteger su código contra esto, cree un objeto, instancia o staticy sincronizar en ese objeto en su lugar.

En tiempo de ejecución, cada clase cargada tiene una instancia de un Class objeto. Ese es el objeto que se utiliza como objeto de bloqueo compartido por static synchronized métodos. (Cualquier método sincronizado o bloque tiene que bloquear en algunos objeto compartido).

También puede sincronizar este objeto manualmente si lo desea (ya sea en un static método o no). Estos tres métodos se comportan de la misma manera, permitiendo solo un subproceso a la vez en el bloque interno:

class Foo 
    static synchronized void methodA() 
        // ...
    

    static void methodB() 
        synchronized (Foo.class) 
            // ...
        
    

    static void methodC() 
        Object lock = Foo.class;
        synchronized (lock) 
            // ...
        
    

El propósito previsto de static synchronized métodos es cuando desea permitir que solo un subproceso a la vez use algún estado mutable almacenado en static variables de una clase.

Hoy en día, Java tiene características de concurrencia más potentes, en java.util.concurrent y sus subpaquetes, pero las construcciones centrales de Java 1.0 como synchronized métodos siguen siendo válidos y utilizables.

En palabras simples un 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 subproceso puede acceder al método a la vez.
Y static synchronized significar:

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *