Use el bloque sincronizado de Java para la clase

Zeeshan Afridi 12 octubre 2023
  1. Use el bloque sincronizado de Java para la clase
  2. Conclusión
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 Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn