线程安全问题:模拟取钱案例

 

 

 

复制代码
package Karl.Demo.money;

public class Test {
    public static void main(String[] args) {
        Account acc=new Account(100000);
        new DrawThread(acc,"小明").start();
        new DrawThread(acc,"小红").start();
    }
}
复制代码
复制代码
package Karl.Demo.money;

public class DrawThread extends Thread{
    private Account acc;
    public DrawThread(Account acc,String name){
        super(name);
        this.acc=acc;
    }
    @Override
    public void run() {
        //取钱
        acc.drawmoney(100000);
    }
}
复制代码
复制代码
package Karl.Demo.money;

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 + "取钱成功");
            this.money-=money;
            System.out.println(name+"取钱过后,余额为:"+this.money);
        }else {
            System.out.println(name + "取钱失败,余额不足");
        }
    }
}
复制代码

 

posted @   Karlshell  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示