o meu código as vezes funciona e da o resultado certo outro não, oque ta errado
class Conta {
private float saldo, valor;
public Conta() {
}
public Conta(float inicial)
{
saldo = inicial;
}
public float saldo() {
return saldo;
}
public synchronized void deposita(float valor) {
saldo = saldo + valor;
}
public synchronized void retira(float valor) {
saldo = saldo - valor;
}
}
class ThreadDeposita extends Thread {
private Conta c;
ThreadDeposita(Conta c) {
this.c = c;
}
public void run() {
for (int i = 0; i < 10; i++) // faz 10 depositos de 100
c.deposita(100);
}
}
class ThreadRetira extends Thread {
private Conta c;
ThreadRetira(Conta c) {
this.c = c;
}
public void run() {
for (int i = 0; i < 5; i++) // faz 5 retiradas de 50
c.retira(50);
}
}
class OperacoesBancarias {
public static void main(String[] args) {
Conta c = new Conta();
ThreadDeposita td = new ThreadDeposita(c);
ThreadRetira tr = new ThreadRetira(c);
td.start();
tr.start();
System.out.println("Saldo da conta: " + c.saldo());
}
}
Tenta sincronizar o método saldo() também…
public synchronized float saldo() {
return saldo;
}
Responda se funcionou, por favor.
Continua o mesmo problema o saldo continua não dando certo as vezes da e as vezes não, mas na maioria das vezes ta dando 0 a vez de 750 e sincronizei o saldo e não adiantou
Eu estou estudando threads na faculdade mas nunca tinha usado com Java.
Coloquei para imprimir quem deposita e quem retira antes para ver, notei que a impressão println final não dependia dessas threads, então coloquei um
while( threads executando )
{ não faz nada}
Acho que resolvi teu problema, é para sempre imprimir 750, certo?
class Conta {
private float saldo, valor;
public Conta() {
}
public Conta(float inicial) {
saldo = inicial;
}
public synchronized float saldo() {
return saldo;
}
public synchronized void deposita(float valor) {
saldo = saldo + valor;
}
public synchronized void retira(float valor) {
saldo = saldo - valor;
}
}
class ThreadDeposita extends Thread {
private Conta c;
ThreadDeposita(Conta c) {
this.c = c;
}
public void run() {
for (int i = 0; i < 10; i++)
// faz 10 depositos de 100
this.c.deposita(100);
System.out.println("Deposita.");
}
}
class ThreadRetira extends Thread {
private Conta c;
ThreadRetira(Conta c) {
this.c = c;
}
public void run() {
for (int i = 0; i < 5; i++)
// faz 5 retiradas de 50
this.c.retira(50);
System.out.println("Retira.");
}
}
class OperacoesBancarias {
public static void main(String[] args) {
Conta c = new Conta();
ThreadDeposita td = new ThreadDeposita(c);
ThreadRetira tr = new ThreadRetira(c);
td.start();
tr.start();
//espera terminar as threads.
while( td.isAlive() || tr.isAlive()) {
//nada
}
System.out.println("Saldo da conta: " + c.saldo());
}
}
Aguardo tua resposta.
agora funcionou muito obrigado