《代码整洁之道》—第13章13.2节挑战

简介:

本节书摘来自异步社区《代码整洁之道》一书中的第13章13.2节挑战,作者【美】Robert C. Martin,更多章节内容可以访问云栖社区“异步社区”公众号查看。

13.2 挑战
并发编程为何如此之难?来看看下面这个小型类:

public class X {
  private int lastIdUsed;
  public int getNextId() {
       return ++lastIdUsed;
  }
}

比如,创建x的一个实体,将lastIdUsed设置为42,在两个线程中共享这个实体。假设这两个线程都调用getNextId( )方法,结果可能有三种输出:

线程一得到值43,线程二得到值44,lastIdUsed为44;
线程一得到值44,线程二得到值43,lastIdUsed为44;
线程一得到值43,线程二得到值43,lastIdUsed为43。
第三种结果令人惊异[3],当两个线程相互影响时就会出现这种情况。这是因为线程在执行那行Java代码时有许多可能路径可行,有些路径会产生错误的结果。有多少种不同路径呢?要真正回答这个问题,需要理解Just-In-Time编译器如何对待生成的字节码,还要理解Java内存模型认为什么东西具有原子性。

简答一下,就生成的字节码而言,对于在getNextId方法中执行的那两个线程,有12870种不同的可能执行路径[4]。如果lastIdUsed的类型从int变为long,则可能路径的数量将增至2704156种。当然,多数路径都得到正确结果。问题是其中一些不能得到正确结果。

相关文章
|
6月前
|
定位技术
技术人修炼之道阅读笔记(七)系统性思维方法
技术人修炼之道阅读笔记(七)系统性思维方法
|
6月前
技术人修炼之道阅读笔记(八)归纳法思维
技术人修炼之道阅读笔记(八)归纳法思维
|
消息中间件 运维 前端开发
代码整洁之道
我们在做系统开发编码时,无论是对于系统响应及时性没有前端系统要求那么高,却有业务复杂、数据严谨的性质。还是面对高并发多线程,海量业务,分布式事务,一致性等要求很高的情况。良好的代码质量是保障系统和业务稳定的基础,要求我们从每一个代码、每一个变量、每一个方法做起
629 0
代码整洁之道
|
Java 程序员 测试技术
《代码整洁之道》&《程序员的职业素养》
《代码整洁之道》&《程序员的职业素养》
539 0
|
API 项目管理 数据安全/隐私保护
十年开发老司机,感悟DDD领域驱动设计的战略设计到底是什么?
模型设计,DDD 分两阶段,战略设计和战术设计。
164 0
|
设计模式 测试技术 程序员
代码整洁之道(一)最佳实践小结
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. 普通的工程师堆砌代码,优秀的工程师优雅代码,卓越的工程师简化代码。如何写出优雅整洁易懂的代码是一门学问,也是软件工程实践里重要的一环。前段时间通读了三本经典书籍《代码整洁之道 》、《编写可读代码的艺术》、《重构:改善既有代码的设计》,本文将重点从注释、命名、方法、异常、单元测试等方面总结了一些代码整洁最佳实践。
291 0
|
程序员 容器
代码整洁之道读后理解
###一,关于程序员的价值观 对于一个程序员来说,是应该有价值观的,然而最朴素的基本价值观,就是要写好的代码。然后,要做到这一点不容易, 对些,我针对这些价值观有自己的一些看法: (当然,在网上有关于价值观的内容一大片,各有视角,这里仅仅说说我的看法) 1,good software != quality code 2,软件开本 = 开发成本 + **维护成本** >注
1703 0
|
架构师 测试技术 数据库连接