Sincronización en Java

Los programas de subprocesos múltiples a menudo pueden llegar a una situación en la que varios subprocesos intentan acceder a los mismos recursos y finalmente producen resultados erróneos e imprevistos. 

Por lo tanto, debe asegurarse mediante algún método de sincronización que solo un subproceso pueda acceder al recurso en un momento dado. Java proporciona una forma de crear subprocesos y sincronizar sus tareas mediante bloques sincronizados. Los bloques sincronizados en Java están marcados con la palabra clave sincronizada. Un bloque sincronizado en Java se sincroniza en algún objeto. Todos los bloques sincronizados sincronizados en el mismo objeto solo pueden tener un subproceso ejecutándose dentro de ellos a la vez. Todos los demás subprocesos que intentan ingresar al bloque sincronizado se bloquean hasta que el subproceso dentro del bloque sincronizado sale del bloque.

Java

// A Java program to demonstrate working of
// synchronized.
  
import java.io.*;
import java.util.*;
  
// A Class used to send a message
class Sender
{
    public void send(String msg)
    {
        System.out.println("Sending\t"  + msg );
        try
        {
            Thread.sleep(1000);
        }
        catch (Exception e)
        {
            System.out.println("Thread  interrupted.");
        }
        System.out.println("\n" + msg + "Sent");
    }
}
  
// Class for send a message using Threads
class ThreadedSend extends Thread
{
    private String msg;
    Sender  sender;
  
    // Receives a message object and a string
    // message to be sent
    ThreadedSend(String m,  Sender obj)
    {
        msg = m;
        sender = obj;
    }
  
    public void run()
    {
        // Only one thread can send a message
        // at a time.
        synchronized(sender)
        {
            // synchronizing the send object
            sender.send(msg);
        }
    }
}
  
// Driver class
class SyncDemo
{
    public static void main(String args[])
    {
        Sender send = new Sender();
        ThreadedSend S1 =
            new ThreadedSend( " Hi " , send );
        ThreadedSend S2 =
            new ThreadedSend( " Bye " , send );
  
        // Start two threads of ThreadedSend type
        S1.start();
        S2.start();
  
        // wait for threads to end
        try
        {
            S1.join();
            S2.join();
        }
        catch(Exception e)
        {
            System.out.println("Interrupted");
        }
    }
}

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *