Cómo sincronizar datos compartidos con el bloqueo multiproceso de Java
La mayoría de las aplicaciones requieren que los hilos se comuniquen entre sí para sincronizar sus acciones. En un programa Java, la forma más sencilla de lograr la sincronización es bloquear el hilo de Java. Para evitar el acceso simultáneo a un recurso, los subprocesos pueden bloquear y desbloquear el recurso antes y después de usarlo. Imagínese bloquear la fotocopiadora. Sólo un empleado tiene la llave en todo momento. Sin la clave, la fotocopiadora no se puede utilizar.
Asigne bloqueos multiproceso de Java a variables para que los subprocesos de Java puedan comunicarse y sincronizarse rápida y fácilmente. Si bloquea un objeto, sabrá que ningún otro hilo puede acceder a él. Incluso en modo preventivo, otros subprocesos no pueden acceder a él hasta que el subproceso bloqueado se despierte para completar su trabajo y lo desbloquee. Los subprocesos que intentan acceder a un objeto bloqueado normalmente entran en suspensión hasta que el subproceso bloqueado lo desbloquea. Una vez que se abre el bloqueo, estos procesos inactivos se despertarán y se trasladarán a la cola lista.
En la programación Java, todos los objetos tienen bloqueos y los subprocesos pueden utilizar la palabra clave sincronizada para adquirir bloqueos. En cualquier momento, un método de instancia o un bloque de código sincronizado de una clase determinada puede ser ejecutado por un solo subproceso. Esto se debe a que el código necesita adquirir el bloqueo multiproceso Java del objeto antes de ejecutarse. Siguiendo con nuestra analogía con la fotocopiadora. Para evitar conflictos de replicación, simplemente podemos replicar recursos de forma sincrónica como se muestra a continuación. Ejemplo de código: solo un empleado puede utilizar el recurso de réplica a la vez. Los métodos (en el objeto Copiadora) se utilizan para modificar el estado de la copiadora. Este método es el método sincrónico. Solo un hilo puede ejecutar el código sincronizado en el objeto COPIER, por lo que los empleados que necesiten usar el objeto Copier deben esperar en la fila.
Copiadora de clase {
Sincronización pública anulada Realizar copia (Copia interna del documento) {
//Solo un subproceso realiza esta operación a la vez
}
Public void loadPaper() {
//¡Varios hilos pueden acceder a él al mismo tiempo!
Sincronización (esto){
//Solo un hilo accede a él a la vez
//Siéntete libre de usar recursos compartidos para sobrescribir miembros, etc.
Bloqueos multiproceso de Java detallados
El uso de bloqueos a nivel de objeto suele ser un enfoque tosco. ¿Por qué bloquear todo el objeto y no permitir que otros subprocesos accedan a recursos compartidos utilizando otros métodos sincronizados en el objeto durante un corto período de tiempo? Si un objeto tiene varios recursos, no es necesario bloquear todos los subprocesos para que un subproceso utilice algunos de los recursos. Debido a que cada objeto tiene un bloqueo multiproceso de Java, puede utilizar objetos virtuales para bloquearlos como se muestra a continuación.
Clase FineGrainLock {
mi clase miembro x y;
Objeto xlock = new Object()ylock = new Object();
public void foo() {
Sincronización (xlock) {
//Accede x aquí
}
//Aquí Haz algo , pero no uses recursos compartidos
Sincronización (ylock) {
//Accede aquí
}
} p>
Columna pública no válida(){
Sincronizar(esto){
//Accede a xey aquí
} p>
//Haz algo aquí, pero no uses recursos compartidos
}
}
Lishi Xinzhi/Article/program/Java/ gj/201311 /27267