这个多线程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); 尽管两种方法都是单独同步的,但整体操作却不是. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 缺少ByteBuffer上的一些绝对方法
- java – NullPointerException在IabHelper.queryPurchases中
- java – 无法在Android应用的谷歌分析属性中设置自定义维度
- java – 使用OAuth-Signpost和Apache HttpComponents签署PO
- Properties存取配置文件
- Java方法中的副作用
- JSP Request.getIntHeader()方法:获取客户端请求中对应的头
- java – Servlet过滤器“代理”,仅作用于远程端点的响应
- java – Websockets,Play Framework和Actor
- java – 在这段代码中,变量如何可以为null?