class Account {
private String name;
private double balance;
public Account(String name)
{
this.name = name;
this.balance =0;
}
public String getName()
{
return name;
}
public double balance()
{
return balance;
}
public void put(double value)
{
if(value>0)
this.balance +=value;
}
public double get(double value)
{
if(value>0)
{
if(value<=this.balance)
this.balance-=value;
else
{
value = this.balance;
this.balance = 0;
}
return value;
}
return 0;
}
}
class SaveLock extends Thread
{
private Account account;
private double value;
public SaveLock(Account a1,double value)
{
this.account =a1;
this.value =value;
}
public void run()
{
synchronized(this.account)
{
double howmatch = this.account.balance();
try
{
sleep(1);
}
catch(InterruptedException e)
{
}
this.account.put(this.value);
System.out.println(this.account.getName()+"账户;现有"+howmatch+",存入"+this.value+",余额"+this.account.balance());
}
}
}
public class FetchLocal extends Thread {
private Account account;
private double value;
public FetchLocal(Account a1,double value)
{
this.account = a1;
this.value = value;
}
public void run()
{
synchronized(this.account)
{
double howmatch = this.account.balance();
try
{
sleep(1);
}
catch(InterruptedException e)
{
}
System.out.println(this.account.getName()+"账户:现有"+howmatch+",取走"+this.account.get(this.value)+",余额"+this.account.balance());
}
}
public static void main(String args[])
{
Account wang = new Account("Wang");
(new SaveLock(wang,100)).start();
(new SaveLock(wang,200)).start();
(new FetchLocal(wang,300)).start();
}
}
这个程序的输出结果为什么是这样??
Wang账户;现有0.0,存入100.0,余额100.0
Wang账户:现有100.0,取走100.0,余额0.0
Wang账户;现有0.0,存入200.0,余额200.0
而不是
Wang账户;现有0.0,存入100.0,余额100.0
Wang账户:现有100.0,存入200.0,余额300.0
Wang账户;现有300.0,取走300.0,余额0.0求解释!!
Wang账户;现有100.0,存入200.0,余额300.0
Wang账户:现有300.0,取走300.0,余额0.0
在程序每个部分输出一下,以了解其执行顺序