多线程中出现 了不安全的现象
代码1
public class bank {
public static void main(String[] args) {
Count count = new Count("888888",10000000);
Drawing preson = new Drawing(count,7000000,"用户1");
Drawing preson2 = new Drawing(count,7000000,"用户2");
preson.start();
preson2.start();
}
}
class Count{
String num;
int money;
public Count(String num, int money) {
super();
this.num = num;
this.money = money;
}
}
class Drawing extends Thread{
private Count count;
private int drawingMoney;
private int nowMoney;
public Drawing(Count count, int drawingMoney, String name) {
super(name);
this.count = count;
this.drawingMoney = drawingMoney;
}
@Override
public void run() {
if(count.money<drawingMoney) {
System.out.println("对不起 余额不足.....");
return;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
nowMoney = nowMoney +drawingMoney;
count.money = count.money - drawingMoney;
System.out.println("尊敬的账户:"+count.num+","+this.getName()+",您成功取款:"+drawingMoney+",您的余额为:"+count.money);
return;
}
}
出现的结果就是
尊敬的账户:888888,用户1,您成功取款:7000000,您的余额为:-4000000
尊敬的账户:888888,用户2,您成功取款:7000000,您的余额为:-4000000
代码2
public class bank {
public static void main(String[] args) {
Count count = new Count("888888",10000000);
Drawing preson = new Drawing(count,7000000,"用户1");
Drawing preson2 = new Drawing(count,7000000,"用户2");
preson.start();
preson2.start();
}
}
class Count{
private String num;
private int money;
public Count(String num, int money) {
super();
this.num = num;
this.money = money;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
class Drawing extends Thread{
private Count count;
private int drawingMoney;
private int nowMoney;
public Drawing(Count count, int drawingMoney, String name) {
super(name);
this.count = count;
this.drawingMoney = drawingMoney;
}
public void test() {
count.setMoney(count.getMoney() - drawingMoney);
System.out.println(count.getMoney());
}
@Override
public void run() {
if(count.getMoney()<drawingMoney) {
System.out.println("对不起 余额不足.....");
return;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
nowMoney = nowMoney +drawingMoney;
count.setMoney(count.getMoney() - drawingMoney);
System.out.println("尊敬的账户:"+count.getNum()+","+this.getName()+",您成功取款:"+drawingMoney+",您的余额为:"+count.getMoney());
return;
}
}
出现的结果就是
尊敬的账户:888888,用户2,您成功取款:7000000,您的余额为:3000000
尊敬的账户:888888,用户1,您成功取款:7000000,您的余额为:3000000
这是为什么,能帮我解答一下嘛?
```