Java - Synchronized
Concepto
- 
    
Los elementos sincronizados sólo podrán ser accedidos por un hilo a la vez se suele utilizar en la programación concurrente
 - 
    
Se suele aplicar en bloques de código o en métodos
- El 
modificador synchronizeden Java se utiliza para controlar el acceso concurrente a un método o bloque de código 
 - El 
 - 
    
Cuando un hilo intenta ejecutar un método o bloque de código marcado como
synchronizedel hilo adquirirá el bloqueo delobjetoen el cual se encuentra elmétodoobloque de código - 
    
Mientras el hilo tiene el bloqueo otros hilos que intenten adquirir el mismo bloqueo serán bloqueados y tendrán que esperar hasta que el hilo actual libere el bloqueo
- Un ejemplo de uso del 
modificador synchronizedes cuando se tiene una clase que representa una cuenta bancaria y varios hilos que intentan realizar operaciones de retirada y depósito en la cuenta al mismo tiempo. 
 - Un ejemplo de uso del 
 - 
    
Sin el uso de
synchronizedes posible que dos hilos intenten retirar fondos de la cuenta al mismo tiempo lo que resultaría en un saldo incorrecto. 
public class BankAccount {
    private double balance;
    public synchronized void deposit(double amount) {
        balance += amount;
    }
    public synchronized void withdraw(double amount) {
        balance -= amount;
    }
    public double getBalance() {
        return balance;
    }
}
- 
    
Ejemplo
 - 
    
Los métodos
depositywithdrawestán marcados comosynchronizedlo que significa que solo un hilo puede ejecutar uno de estosmétodosa la vez- 
        
Esto garantiza que no se produzcan conflictos entre
hilosal acceder al saldo de la cuenta - 
        
También se puede usar el modificador
synchronizeden bloques de código en lugar demétodoscompletos 
 - 
        
 - 
    
Ejemplo
- Si solo deseamos 
sincronizaruna parte de un método podemos hacerlo de la siguiente manera 
 - Si solo deseamos 
 
public class BankAccount {
    private double balance;
    public void deposit(double amount) {
        synchronized (this) {
            balance += amount;
        }
    }
    public void withdraw(double amount) {
        synchronized (this) {
            balance -= amount;
        }
    }
    public double getBalance() {
        return balance;
    }
}
- En el ejemplo solo las operaciones de actualización del saldo están 
sincronizadasmientras que el acceso a la lectura del saldo no lo esta 
Resumen
- El modificador 
synchronizedenJavase utiliza para garantizar que solo unhilopueda acceder a un método obloque de códigoa la vez lo que ayuda a evitar conflictos entre hilos al acceder a recursos compartidos 
      
      
      
Deja un comentario