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); } } }
原文:https://www.cnblogs.com/zhaoyunlong/p/11853162.html