多线程中操作对象值出现的问题希望有人解答一下

多线程中出现 了不安全的现象

代码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

这是为什么,能帮我解答一下嘛?

  1. ```java

```

img


两个线程操作同一个对象 线程不安全