线程安全问题

出现问题的原因:

  • 存在多个线程在同时执行
  • 同时访问一个共享资源
  • 存在修改该共享资源
    我们来看一下取钱问题,小红和小明有一个共同的账户有1000元,一起取钱
    在这里插入图片描述
    Accout代码
package hust.cs.money;

public class Account {
    private double money; // 余额
    private  String cardId; // 卡号

    public Account() {

    }

    public Account(double money, String cardId) {
        this.money = money;
        this.cardId = cardId;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public void drawMoney(double i){
        // 我们还要搞清楚谁来取钱
        String m = Thread.currentThread().getName();
        if(this.money>=i){
            System.out.println(m+"来取"+i+"成功");
            this.money -=i;
            System.out.println("还剩下"+this.money);
        }else{
            System.out.println(m + "来取钱,钱不够");
        }
    }
}

ThreadTask代码

package hust.cs.money;

public class ThreadTask {

    // 创建一个账户对象,代表两个人的共享账户
    public static void main(String a[]){
        Account acc = new Account(1000,"ICBC-001");
        // 两个人同时取钱
        // 创建两个线程代表两个人取钱
        new  DrawThread(acc,"小明").start(); // 第一个人取钱
        new DrawThread(acc,"小红").start(); // 第二个人取钱
    }
}

DrawThread代码

package hust.cs.money;

public class DrawThread extends Thread{

    Account acc;

    DrawThread(Account acc,String name){
        super(name);
        this.acc = acc;
    }

    @Override
    public void run() {
        // 取钱
        acc.drawMoney(1000);
    }
}

相关推荐

  1. Spring Bean的线安全问题

    2024-04-27 13:06:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 13:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 13:06:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 13:06:01       82 阅读
  4. Python语言-面向对象

    2024-04-27 13:06:01       91 阅读

热门阅读

  1. 安装 wsl-ubuntu 24.04

    2024-04-27 13:06:01       91 阅读
  2. 谷歌TPU(Tensor Processing Unit)

    2024-04-27 13:06:01       32 阅读
  3. Vite与Vue 3的SSR实践

    2024-04-27 13:06:01       41 阅读
  4. 数仓的4中模型架构

    2024-04-27 13:06:01       32 阅读
  5. leetcode541 反转字符串 II

    2024-04-27 13:06:01       34 阅读
  6. 23.Feign自定义日志配置

    2024-04-27 13:06:01       30 阅读