{
public static void main(String[] args)
{
Account acct = new Account(String.valueOf(123), 1000);
new DrawThread("甲", acct, 800).start();
new DrawThread("乙", acct, 800).start();
}
}
package ex07;
import java.util.concurrent.locks.ReentrantLock;
public class Account
{
private String accountNo;
private double balance;
private final ReentrantLock lock = new ReentrantLock();
public Account(String accountNo, double balance)
{
this.accountNo = accountNo;
this.balance = balance;
}
public void draw(double drawAmount)
{
lock.lock();
try
{
if (balance >= drawAmount)
{
try
{
Thread.sleep(1);
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
balance -= drawAmount;
System.out.println("余额为啊:" + balance);
} else
{
System.out.println("余额不足啊。");
}
} finally
{
lock.unlock();
}
}
public String getAccountNo()
{
return accountNo;
}
public void setAccountNo(String accountNo)
{
this.accountNo = accountNo;
}
public double getBalance()
{
return balance;
}
public void setBalance(double balance)
{
this.balance = balance;
}
public int hashCode()
{
return accountNo.hashCode();
}
public boolean equals(Object obj)
{
if (obj != null && obj.getClass() == Account.class)
{
Account target = (Account) obj;
return target.getAccountNo().equals(accountNo);
}
return false;
}
}
package ex07;
public class DrawThread extends Thread
{
private Account account;
private double drawAmount;
public DrawThread(String name, Account account, double drawAmount)
{
super(name);
this.account = account;
this.drawAmount = drawAmount;
}
public void run()
{
account.draw(drawAmount);
/*synchronized (account)
{
if (account.getBalance() >= drawAmount)
{
try
{
Thread.sleep(1);
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
account.setBalance(account.getBalance() - drawAmount);
System.out.println("取钱成功。余额:" + account.getBalance());
} else
{
System.out.println("余额不足。");
}
}*/
}
}