线程安全问题介绍:取钱的线程安全问题

取钱的线程安全问题

取钱案例需求分析

线程安全问题出现的原因

代码:模拟线程安全问题(上述取钱案例)
Account类(账户类)
package com.itheima.day3_thread_safe;public class Account {private double money;public Account() {}public Account(double money) {this.money = money;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}public void DrawMoney(double money) {String name = Thread.currentThread().getName();if (this.money>=money) {System.out.println(name+"来取钱" +money+ "成功!");this.money-=money;System.out.println(name+"来取钱后,余额剩余:" +this.money);}else {System.out.println(name+"来取钱,余额不足~~");}}
}
DrawThread类(线程类)
package com.itheima.day3_thread_safe;public class DrawThread extends Thread {private Account acc;public DrawThread(Account acc,String name) {super(name);this.acc = acc;}@Overridepublic void run() {acc.DrawMoney(100000);}
}
ThreadTest类(主程序:模拟线程安全问题)
package com.itheima.day3_thread_safe;
public class ThreadTest {public static void main(String[] args) {Account acc = new Account(100000);new DrawThread(acc,"小明").start();new DrawThread(acc,"小红").start();}
}
