Daily Archive: 2016-07-03

混用同步块和同步方法时的问题

  在Thinking in Java (Fourth Edition)的Concurrency一章的Critical Sections 一节中有一个例子,用于展示同步整个方法和手动给代码块加锁两种同步方式的差异。   例子中定义了Pair具有x和y两个字段,要求x和y必须始终保持相同。checkState()会检查x和y是否相同,如不相同则抛出异常。 class Pair { // Not th…
Read more

Concurrency: Sharing Resources (2)

3 Atomicity and Volatility   原子操作(Atomic Operation)指的是不会被线程调度打断的操作。对除了long和double以外基本类型的简单操作(如赋值和返回值)是原子性的。JVM允许以两次32位操作的形式读写64位的值(long和double型变量),导致读写期间可能发生上下文切换。为了使long和double得到原子性,可以使用volatile来修饰lo…
Read more