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.