线程安全问题(原来这就是赚钱的最佳方法)

案例:

小明和小红是一对夫妻,他们有一个共同的账户,账户里有10万元

他们同时来取钱,并且他们都取了10万元,这个时候会发生什么呢?

//多个线程同时访问同一个共享资源而且修改了该资源,便会产生线程安全问题
public class 多线程_3线程安全案例 {
    public static void main(String[] args) {
        //定义线程类,创建一个共享的账户对象
        account a=new account("abc",10000);
        //创建两个取钱的线程对象
        new drawthread(a,"小明").start();
        new drawthread(a,"小红").start();
    }
}
//取钱的线程类
class drawthread extends Thread{
    //接收处理的账户对象
    private account acc;
    public drawthread(account acc,String name){
        super(name);
        this.acc=acc;
    }
    public void run(){
        //取钱
        acc.drawmoney(10000);

    }
}
class account{
    private String cartId;
    private double money;//账户余额

    public account() {
    }

    public account(String cartId, double money) {
        this.cartId = cartId;
        this.money = money;
    }

    public String getCartId() {
        return cartId;
    }

    public void setCartId(String cartId) {
        this.cartId = cartId;
    }

    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+"来取钱,但余额不足!");
        }
    }
}

 答案是:银行亏了10万元,而小明和小红白嫖了10万元

看到这很多人不免有个大胆的想法

别急,这种低级错误银行当然不会犯,下期将为大家揭晓解决方案

猜你喜欢

转载自blog.csdn.net/qq_62731133/article/details/124413633