A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Bank implements Runnable {
        int money = 100;
        static Object obj = new Object();
        static int count = 20;

        /**
         * @return the money
         */
        public int getMoney() {
                return money;
        }

        /**
         * @param money
         *            the money to set
         */
        public void setMoney(int money) {
                this.money = money;
        }

        @Override
        public void run() {
                while (true) {
                        if (Thread.currentThread().getName().equals("用户A")) {
                                synchronized (obj) {
                                        if (count < 1) {
                                                break;
                                        }
                                        money+=100;
                                        //this.setMoney(money+100);
                                        System.out.println(Thread.currentThread().getName()
                                                        + "线程正在执行第" + (21 - count) + "次,增加了100元,目前money的值为"
                                                        + money + "元");
                                        count--;
                                }

                        } else if (Thread.currentThread().getName().equals("用户B")) {
                                synchronized (obj) {
                                        if (count < 1) {
                                                break;
                                        }
                                        int x = (int) (Math.random() * 100) + 1;
                                        System.out.println(Thread.currentThread().getName()
                                                        + "线程正在执行第" + (21 - count) + "次,增加了" + x
                                                        + "元,目前money的值为" + (money + x) + "元");
                                        count--;
                                }
                        } else if (Thread.currentThread().getName().equals("用户C")) {
                                synchronized (obj) {
                                        try {
                                                Thread.sleep(10);
                                        } catch (InterruptedException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                        if (count < 1) {
                                                break;
                                        }
                                        System.out.println(Thread.currentThread().getName()
                                                        + "线程正在执行第" + (21 - count) + "次,睡眠了10毫秒");
                                        count--;
                                }
                        }
                }

        }

}

public static void main(String[] args) {
                Bank b = new Bank();
                Thread t1 = new Thread(b,"用户A");
                Thread t2 = new Thread(b,"用户B");
                Thread t3 = new Thread(b,"用户C");
               
                t1.start();
                t2.start();
                t3.start();
        }

求高人指点

1 个回复

倒序浏览
你可以将你的println语句分多次执行,然后运行并没有发现什么不安全的地方。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马