黑马程序员技术交流社区

标题: 多线程小实例---银行存钱问题 [打印本页]

作者: chenyanwei6    时间: 2016-12-23 21:43
标题: 多线程小实例---银行存钱问题
package com.heima.code;
/*
需求:
银行有一个金库。
有两个储户分别存入300元,每次存100元,存3次。

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

如何找到问题?
1.明确哪些代码是多线程运行代码;
2.明确共享数据;
3.明确多线程运行代码中哪些语句是操作共享数据的。

* */
class Bank {
        private int sum = 0;// 银行总金额
//        Object obj = new Object();
        public synchronized void add(int n) {
//                synchronized (obj) {
                        sum = sum + n;
                        try {
                                Thread.sleep(10);
                        } catch (InterruptedException e) {

                                e.printStackTrace();
                        }
                        System.out.println("银行金额sum:" + sum);
//                }
        }
}

class Cus implements Runnable {
        private Bank b = new Bank();

        public void run() {

                for (int i = 0; i < 3; i++) {
                        b.add(100);
                }
        }
}

public class ThreadDemo05 {

        public static void main(String[] args) {
                Cus c = new Cus();
                Thread t1 = new Thread(c);
                Thread t2 = new Thread(c);
                t1.start();
                t2.start();
        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2