Use el bloque sincronizado de Java para la clase
En Java, la sincronización administra múltiples subprocesos que acceden a recursos que podrían compartirse. La sincronización en Java se usa para que los subprocesos puedan comunicarse de manera confiable entre sí, y también se considera la mejor opción para que un solo subproceso acceda a los recursos compartidos.
La palabra clave synchronized
se utiliza para marcar bloques sincronizados. En algunos objetos, se aplica el bloque de sincronización de Java.
Use el bloque sincronizado de Java para la clase
Si un bloque sincronizado para los mismos objetos tiene múltiples subprocesos, solo permitiría que un subproceso ingrese al bloque y ejecute solo un subproceso a la vez. Todos los demás subprocesos permanecerían bloqueados.
Expliquemos el bloque de sincronización de Java para la clase, junto con ejemplos.
Código de ejemplo:
class Block {
// synchronized block starts from here
void printBlock(int b) {
synchronized (this) {
System.out.println("The block output is: ");
for (int j = 1; j <= 4; j++) {
System.out.println(b * j);
// handles exception
try {
Thread.sleep(500);
} catch (Exception e) {
System.out.println(e);
}
}
}
} // ending
}
class S1 extends Thread {
Block s;
S1(Block s) {
this.s = s;
}
public void run() {
s.printBlock(10);
}
}
class S2 extends Thread {
Block s;
S2(Block s) {
this.s = s;
}
public void run() {
s.printBlock(200);
}
}
class SyncBlock {
// main method
public static void main(String args[]) {
// object creation
Block obj = new Block();
S1 s1 = new S1(obj);
S2 s2 = new S2(obj);
// run the threads s1 and s2
s1.run();
s2.run();
}
}
Producción :
The block output is:
10
20
30
40
The block output is:
200
400
600
800
En el ejemplo anterior, tenemos dos hilos, S1
y S2
. Ambos hilos tienen un método printBlock
que les ayuda a llamar a los métodos sincronizados
.
El valor de entrada del hilo S1
es 10, y para S2
, es 200. Entonces, la salida del bloque se imprime entre la salida de los hilos S1
y S2
.
Código de ejemplo:
import java.util.*;
class synchronize {
String title = "";
public int c = 0;
public void result(String s, List<String> li) {
// only one thread is allowed to change the title simultaneously.
synchronized (this) {
title = s;
c++;
}
li.add(s);
}
}
class SyncBlock {
// main method
public static void main(String[] args) {
// for synchronize class, we have created an object
synchronize ob = new synchronize();
// we have created a list here
List<String> li = new ArrayList<String>();
// for calling the method, a string is passed to it
ob.result("Sprint Planning", li);
System.out.println(ob.title);
}
}
Producción :
Sprint Planning
En el ejemplo anterior, se ha creado una sincronización de clases. En esta clase, hemos utilizado el método sincronizado
.
Se pasa una cadena como valor de entrada para llamar al método. es decir, Planificación de Sprint
.
Cuando ejecutamos el programa anterior, obtenemos Planificación de Sprint
como salida.
Conclusión
Hay muchas maneras de discutir los bloques de sincronización en Java, pero en este artículo, hemos explicado la sincronización, los bloques de sincronización y cómo funciona.
Si tenemos varios hilos
para un objeto a la vez, usando un bloque de sincronización, solo podemos ejecutar un hilo a la vez. Los otros subprocesos no podrán ingresar al bloque hasta que el subproceso dentro del bloque se ejecute con éxito.
Entonces, la clase de bloque sincronizado en Java asegura que, por ejemplo, solo debe haber un “hilo” en el bloque a la vez.
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn