noobprogramer Ответов: 1

Почему я получаю нерегулярный выход?


package core;

public class MT3 {
public static void main(String args[]) {
	Account acc1 = new Account();
//	Account acc2 = new Account();
	AThread ath1 = new AThread(acc1, "A");
	BThread ath2 = new BThread(acc1, "B");
}
}
class Account{
	public  synchronized void withdraw() {
		for (int i = 0; i<5; i++) {
			System.out.println("Withdraw \t:"+Thread.currentThread().getName());
			try {
				Thread.sleep(500);
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
	}  void deposite(){
		for (int i=0;i<5;i++) {
			System.out.println("Deposite \t:"+Thread.currentThread().getName());
			try {
				Thread.sleep(500);
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
	}
}
class AThread implements Runnable{
	Account acc;
	public AThread(Account acc, String tname) {
		this.acc=acc;
		Thread t1 = new Thread(this,tname);
		t1.start();
	}
	public void run() {
		acc.withdraw();
	}
}
class BThread implements Runnable{
	Account acc;
	public BThread(Account acc, String tname) {
		this.acc=acc;
		Thread t2 = new Thread(this,tname);
		t2.start();
	}
	public void run() {
		acc.deposite();
	}
}


Что я уже пробовал:

Я использую один объект, и метод вывода-это синхронизация, я не могу понять причину нерегулярного вывода.

1 Ответов

Рейтинг:
1

Patrice T

Вы экспериментируете с тем, что мы называем "расовым состоянием"
Состояние гонки - Википедия[^]