0%

ReentrantLock

The Lock interface in Java offers a choice of unconidtional, polled, timed, and interruptible lock acquisition, and all lock and unlock operations are explicit. ReentrantLock implements Lock, providing the same mutual exclusion and memory-visibility gurantees as synchronized. Acquiring a ReentrantLock has the same memory semantics as entering a synchronized block, and releasing a ReentrantLock has the same memory semantics as exiting a synchronized block.

Read more »

Design a thread-safe class

The design process for a thread-safe class should include these three basic elements:

  1. Identify the variables that form the object’s state.
  2. Identify the invariants that constrain the state variables.
  3. Establish a policy for managing concurrent access to the object’s state.
    Read more »

什么是内存模型?我们为什么需要一个内存模型?

我们之前在详解synchronizedvolatiefinal的文章当中讲过,底层JVM、编译器、处理器执行指令的顺序并不保证和程序员所写的代码的顺序一样。在单线程中,只要遵从as-if-serial语义,就可以进行重排,所以对于程序员来说,底层的实现只是造成了一个程序是按照自己的代码顺序执行的假象。

Read more »

final的基本语义

final在java中是非常常用的关键字,其语义和C++中的constant有类似之处,都代表不变的意思,其可以用在以下地方:

  1. 修饰变量,成员变量或者本地变量均可。
  2. 修饰方法的参数。
  3. 修饰方法。
  4. 修饰类。
    Read more »

我很佩服三浦紫苑,讲好一个故事本身就很不简单,她却偏偏选择依托在编纂辞典《编舟记》或者长跑《强风吹拂》这种让人听上去就觉得枯燥乏味的事物上,然后将一切娓娓道来。相较于其他运动而言,跑步确实听上去不那么让人热血沸腾,不像足篮排那样典型的热血物语,它并不能够给人带来和对手厮杀的压迫感,和赢得比赛、击败对手的畅快感,而更多的时候是一种与自我的搏斗。就像在动画中所说的,箱根驿传的后半段棒次奔跑在路上的时候可能一个人都看不见,所能听见的只有自己的呼吸和心跳。但正是这种习惯在孤独中让自己变得强大的姿态,才是这项运动的迷人之处。

Read more »