首页 > 编程语言 > 详细

线程练习

时间:2019-11-13 21:22:49      阅读:114      评论:0      收藏:0      [点我收藏+]

1:  

银行有一个账户。有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打
印账户余额。

问题:该程序是否有安全问题,如果有,如何解决?

【提示】 1,明确哪些代码是多线程运行代码,须写入run()方法 2,明确什么是共享数据。 3,明确多线程运行代码中哪些语句是操作共享数据的。

 

 

解答

技术分享图片
public class LianxiTest {
    public static void main(String[] args) {
        Accoun accoun = new Accoun(0);
        BankL bankL1 = new BankL(accoun);
        BankL bankL2 = new BankL(accoun);
        bankL1.start();
        bankL2.start();
    }
}


class BankL extends  Thread{

    private  Accoun accoun;

    public  BankL(Accoun accoun){
        this.accoun = accoun;
    }

    @Override
    public void run() {
        for(int i = 0; i < 3; i++){
            accoun.deposit(1000);
        }
    }
}

class Accoun{

    private double balance;

    public  Accoun(double balance){
        this.balance = balance;
    }

    public   synchronized  void deposit(double amt){
        if( amt > 0){
            balance += amt;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+":  存了钱 余额为: "+balance);
        }
    }
}
使用继承Thread类的synchronized方式

 

线程练习

原文:https://www.cnblogs.com/zhaoyunlong/p/11853162.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!