• 线程安全问题 的小案例


    1. package Thread_api_test;
    2. public class ThreadSafety {
    3. //模拟线程安全问题
    4. public static void main(String[] args) {
    5. //1:创建一个账户对象 代表两个人的共享账户
    6. Account acc=new Account("ICBC",10000);
    7. //创建两个线程 分别两个人 再去同一个账户里取钱10000
    8. new DrawThread(acc,"第一个人").start(); //第1个人
    9. new DrawThread(acc,"第二个人").start(); //第2个人
    10. }
    11. }

     

    1. package Thread_api_test;
    2. public class DrawThread extends Thread {
    3. private Account acc;
    4. public DrawThread(Account acc,String name){
    5. super(name);
    6. this.acc=acc;
    7. }
    8. @Override
    9. public void run() {
    10. super.run();
    11. //取钱
    12. acc.drawMoney(10000);
    13. }
    14. }
    1. package Thread_api_test;
    2. public class Account {
    3. private String carId; //卡号
    4. private double money ;//余额
    5. public Account() {
    6. }
    7. public Account(String carId, double money) {
    8. this.carId = carId;
    9. this.money = money;
    10. }
    11. public void drawMoney(double mony) {
    12. //先知道那个人来取钱
    13. String name= Thread.currentThread().getName();
    14. if (this.money>=mony){
    15. System.out.println(name+"来取钱"+mony+"成功!");
    16. this.money-=mony;
    17. System.out.println(name+"来取钱后:剩余的“:"+this.money);
    18. }else{
    19. System.out.println(name+"来取钱:余额不足~~!");
    20. }
    21. }
    22. public String getCarId() {
    23. return carId;
    24. }
    25. public void setCarId(String carId) {
    26. this.carId = carId;
    27. }
    28. public double getMoney() {
    29. return money;
    30. }
    31. public void setMoney(double money) {
    32. this.money = money;
    33. }
    34. }

  • 相关阅读:
    数据结构题型9-顺序栈
    【小题练手】----平方矩阵
    多线程(基础)
    LocalStroage,SessionStroage,Cookide,IndexedDB
    pandas合并操作
    单臂路由的详细配置步骤
    c语言中的字符函数
    system verilog rand randc constraint randomize
    【知识总结】开发提效50%的Javascript常用函数
    STM32Cube学习(1)——点灯&配置
  • 原文地址:https://blog.csdn.net/m0_46290090/article/details/133857026