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