線程安全問題介紹:取錢的線程安全問題

取錢的線程安全問題

取錢案例需求分析

線程安全問題出現的原因

代碼:模擬線程安全問題(上述取錢案例)
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();}
}
