Estou com dúvidas de qual obejto é bloqueado quando declaramos um método como synchronized.
package testKiller7;
public class ContaCorrente {
private int saldo = 50;
public int getSaldo() {
return saldo;
}
public void retirar(int valor) {
saldo = saldo - valor;
}
}
package testKiller7;
public class AccountDanger implements Runnable {
private ContaCorrente conta = new ContaCorrente();
public static void main(String[] args) {
AccountDanger r = new AccountDanger();
Thread one = new Thread(r);
Thread two = new Thread(r);
one.setName("Fred");
two.setName("Lucy");
one.start();
two.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int x = 0; x <= 5; x++) {
efetuarRetirada(10);
if (conta.getSaldo() < 0) {
System.out.println("Limite excedido");
}
}
}
private synchronized void efetuarRetirada(int valor) {
if (conta.getSaldo() >= valor) {
System.out.println(Thread.currentThread().getName()
+ " iniciando retirada");
// após iniciar a retirada, a Tread espera 500 milisegundos antes de
// efetuar a retirada
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
}
conta.retirar(valor);
System.out.println(Thread.currentThread().getName()
+ " efetuou a retirada com sucesso" + "Saldo Atual: "
+ conta.getSaldo());
} else {
System.out.println("Saldo insuficiente para "
+ Thread.currentThread().getName()
+ " retirar. Saldo atual: " + conta.getSaldo());
}
}
}
Qual obejto está sendo bloqueado quando chamo o método sincronizado ?
O objeto AccountDanger ?