原文链接 作者:Doug Lea 译者:欧振聪 校对:丁一
3 设计与实现
同步器背后的基本思想非常简单。acquire操作如下:
[code lang=”java”]
while (synchronization state does not allow acquire) {
enqueue current thread if not already queued;
possibly block current thread;
}
dequeue current thread if it was queued;
[/code]
release操作如下:
[code lang=”java”]
update synchronization state;
if (state may permit a blocked thread to acquire)
unblock one or more queued threads;
[/code]
为了实现上述操作,需要下面三个基本组件的相互协作:
- 同步状态的原子性管理;
- 线程的阻塞与解除阻塞;
- 队列的管理;
创建一个框架分别实现这三个组件是有可能的。但是,这会让整个框架既难用又没效率。例如:存储在队列节点的信息必须与解除阻塞所需要的信息一致,而暴露出的方法的签名必须依赖于同步状态的特性。
同步器框架的核心决策是为这三个组件选择一个具体实现,同时在使用方式上又有大量选项可用。这里有意地限制了其适用范围,但是提供了足够的效率,使得实际上没有理由在合适的情况下不用这个框架而去重新建造一个。 阅读全文