同步代码块
一、问题的出现
run()方法的方法体不具有同步安全性,因为当多条语句在操作共享数据时,其中一个线程的多条语句只执行了一个部分,还没有执行完,另外一个线程参与了执行,导致共享数据结果的错误。
例如问题——银行取钱问题
//账户类,该类封装了账户编号和余额两个实例变量
public class Account
{
// 封装账户编号、账户余额的两个成员变量
private String accountNo;
private double balance;
public Account(){}
// 构造器
public Account(String accountNo , double balance)
{
this.accountNo = accountNo;
this.balance = balance;
}
// 此处省略了accountNo和balance的setter和getter方法
// accountNo的setter和getter方法
public void setAccountNo(String accountNo)
{
this.accountNo = accountNo;
}
public String getAccountNo()
{
return this.accountNo;
}
// balance的setter和getter方法
public void setBalance(double balance)
{
this.balance = balance;
}
public double getBalance()
{
return this.balance;
}
// 下面两个方法根据accountNo来重写hashCode()和equals()方法
public int hashCode()
{
return accountNo.hashCode(