加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

这个多线程Java代码如何工作?

发布时间:2020-12-15 05:08:29 所属栏目:Java 来源:网络整理
导读:鉴于此 Java代码: class Account { private Integer number = 0; public synchronized void setNumber(Integer number) { this.number = number; } public synchronized Integer getNumber() { return number; } } class Client extends Thread { Account a
鉴于此 Java代码:

class Account {
        private Integer number = 0;
        public synchronized void setNumber(Integer number) {
            this.number = number;
        }

         public synchronized Integer getNumber() {
            return number;
        }
    }

    class Client extends Thread {
        Account account;
        public Client(Account account) {
            this.account = account;
        }
        public  void run() {
            for (int i = 1; i <= 1000; i++) {
            account.setNumber(account.getNumber() + 1);
             }
        }
    }

    public class Run {
        public static void main(String[] args) throws Exception {
            Account account = new Account();
            Client one = new Client(account);
            Client two = new Client(account);
            one.start();
            two.start();
            one.join();
            two.join();
           System.out.println("Exiting main");
       System.out.println("account number value: " +account.getNumber());        
        }
    }

主方法完成时,数字的值是多少?是2000还是不到2000?我得到的不到2000.两个线程如何同时从run()调用getNumer()或setNumber(),因为每个线程都是同步的?

解决方法

仔细考虑下一节中会发生什么.

account.setNumber(account.getNumber() + 1);

尽管两种方法都是单独同步的,但整体操作却不是.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读