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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张权 中级黑马   /  2013-3-8 10:08  /  941 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张权 于 2013-3-8 11:33 编辑

/*
需求:
银行有一个金库。
有两个储户分别存300员,每次存100,存3次。

*/

/*class Bank {
        Object obj = new Object();
        private int sum;

        public void add(int n) {
                synchronized (obj) {
                        sum = sum + n;
                        try {
                                wait(10);
                        } catch (Exception e) {
                        }
                        System.out.println("sum = " + sum);
                }
        }
}*/
        class Bank
        {
                private int sum;
                public synchronized void add (int n)
                {               
                                sum = sum +n;
                                try{wait(10);}catch (Exception e){}
                                System.out.println("sum = "+sum);
                }
        }


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

        public void run() {

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

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

  注释部分代码是对的.为什么我改成同步方法后就不对呢?他们共享的数据部不就是我同步方法和同步代码块所包含的吗,既然我同步了,为甚同步方法结果却不对呢?

2 个回复

倒序浏览
经测试,如果把wait改成Thread.sleep(10),则不会出现此问题,不知道为什么wait方法在同步代码块中可以实现同步,但在同步函数中不行.求解.
回复 使用道具 举报
本帖最后由 张权 于 2013-3-8 11:32 编辑
michaelchen 发表于 2013-3-8 10:45
经测试,如果把wait改成Thread.sleep(10),则不会出现此问题,不知道为什么wait方法在同步代码块中可以实现同 ...


同求,其实这个我是看见别人的代码,解答不出来后,发出来的问题,后来发现时把sleep改成了wait,这样就出现了和你一样的疑惑!!:dizzy:
算了再去发个贴得了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马