Simplemente registre cómo usar la palabra clave sincronizada en Java.
Antes de la introducción, es necesario aclarar que cada instancia de objeto de una clase en Java tiene y tiene solo un bloqueo (lock) asociado. La palabra clave sincronizada solo actúa sobre este bloqueo, es decir, se puede considerar que solo está sincronizado. Afecta las instancias de objetos de la clase Java.
función modificada sincronizada
Copie el código de código de la siguiente manera:
método público sincronizado(){
}
Este es el escenario más utilizado, entonces, ¿cuál es el propósito de este método de sincronización? Por conveniencia, se llama método de método.
1. Lo que bloquea sincronizado es la instancia de objeto que llama a este método de sincronización. Por ejemplo, la sincronización se producirá cuando la misma instancia P1 llame a un método en diferentes subprocesos;
2. Cabe señalar que otro objeto P2 de la clase a la que pertenece este objeto puede llamar a este método aMethod arbitrariamente, porque los métodos sincronizados de diferentes instancias de objetos no interfieren entre sí. En otras palabras, otros subprocesos aún pueden acceder al método aMethod en otra instancia de objeto de la misma clase al mismo tiempo;
3. Si un objeto tiene varios métodos sincronizados, como aMethod, bMethod y cMethod, ahora, mientras un subproceso acceda a uno de los métodos sincronizados, otros subprocesos no podrán acceder a ningún método sincronizado en el objeto al mismo tiempo.
El código anterior es en realidad equivalente al siguiente:
Copie el código de código de la siguiente manera:
método público vacío() {
sincronizado (esto) {
}
}
Esto aquí se refiere a la referencia del objeto de instancia, como P1. Se puede ver que la esencia del método de sincronización es aplicar sincronizado a la referencia del objeto. Solo el hilo que ha obtenido el bloqueo del objeto P1 puede llamar al método de sincronización de P1. En lo que respecta a P2, el bloqueo P1 no tiene nada que ver con él. El programa también puede deshacerse del control del mecanismo de sincronización. situación, causando confusión en los datos. De esto derivamos el siguiente bloque de sincronización.
bloque de código modificado sincronizado
Copie el código de código de la siguiente manera:
método d vacío público (algún objeto entonces) {
sincronizado (entonces) {
}
}
El bloqueo obtenido sincronizado aquí es el bloqueo del objeto so, por lo que quien obtenga el bloqueo puede ejecutar el código que controla. Cuando hay un objeto claro como candado, puede escribir el programa de esta manera, pero cuando no hay un objeto claro como candado y solo desea sincronizar un fragmento de código, puede crear una variable de instancia especial (debe ser un objeto) para actuar como cerradura:
Copie el código de código de la siguiente manera:
clase Foo implementa Runnable {
bloqueo de byte privado [] = nuevo byte [0];
Método de anulación pública() {
sincronizado (bloqueo) {
}
}
}
Crear un objeto de matriz de bytes de longitud cero será más rentable que cualquier otro objeto.
método estático modificado sincronizado
Como se mencionó anteriormente, la palabra clave sincronizada solo es válida para instancias P1 en diferentes subprocesos. Entonces, ¿cómo puede ser válida para diferentes instancias de P1 y P2 al mismo tiempo? La respuesta es usar sincronizado para modificar los métodos estáticos. Se puede decir que una clase es propiedad de esta clase. No depende de las instancias de la clase, por lo que solo necesitamos usar la palabra clave sincronizada para modificar los métodos estáticos de la clase para lograr la sincronización entre diferentes instancias.