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 synchronized
en 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
synchronized
el hilo adquirirá el bloqueo delobjeto
en el cual se encuentra elmétodo
obloque 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 synchronized
es 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
synchronized
es 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
deposit
ywithdraw
están marcados comosynchronized
lo que significa que solo un hilo puede ejecutar uno de estosmétodos
a la vez-
Esto garantiza que no se produzcan conflictos entre
hilos
al acceder al saldo de la cuenta -
También se puede usar el modificador
synchronized
en bloques de código en lugar demétodos
completos
-
-
Ejemplo
- Si solo deseamos
sincronizar
una 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
sincronizadas
mientras que el acceso a la lectura del saldo no lo esta
Resumen
- El modificador
synchronized
enJava
se utiliza para garantizar que solo unhilo
pueda acceder a un método obloque de código
a la vez lo que ayuda a evitar conflictos entre hilos al acceder a recursos compartidos
Deja un comentario