Java 并发新特性: Phasers

  • R.J. Lorimer
  • 张凯峰

2008 年 7 月 16 日

话题:Java语言 & 开发架构

本周,JSR 166并发工具包的规范领导者——Doug Lea,就 JSR-166y 引入的新特性——Phasers 在166y concurrency-interest邮件列表上发贴推介。

之前受限于 ForkJoinTasks(在 forkjoin.TaskBarrier 类中) 的灵活的 Barrier 功能,现在被重写为 Phaser 类(放在 j.u.c 而不是 j.u.c.forkjoin 中),这样就可以应用到任何任务中去。
“Phaser"这个概念和名字是由 Rice 大学的一个团队在一份白皮书中创造出来的。这样命名的原因在于该构造的相位有序性和死锁预防属性。这份白皮书较为详尽地解释了 phaser 的概念。同 Java 目前已有特性相比,虽然 Phaser 实现的功能与CyclicBarrier 类 (Java5 中引入)类似,但是在灵活性上它要更胜一筹。
[java.util.concurrent]CyclicBarrier 类支持线程集内周期性 Barrier 同步。然而它并不能像 Phasers 那样做到线程的动态添加和移除,以及单向同步和分相操作。
研究另外的 Barrier 实现的主要动机之一不仅仅是要增加灵活性,还要提高 Barrier 同步概念的性能和可伸缩性。
Phasers 在三个不同的 SMP 系统上运行结果显示,除了普遍适用性和安全性带来的生产效率的提高外,其性能也明显优于现有的 Barrier 实现。
正如 Doug Lea 所说,JSR-166y 引入的 Phaser 由现有的 fork/join 框架改写而来。InfoQ此前的很多文章都提到过 fork/join 框架,它是即将发布的 166y JSR 的重要特性之一,Doug Lea 曾为其专门写过一份介绍用途和用法的白皮书 。前面提到的 TaskBarrier 类被 fork/join 框架用来管理不同任务的边界,并合并运行结果,换句话说就是连接任务。

在 JSP-166y 上可以找到Phaser 类的 Javadoc 草稿,Lea 在他发给邮件列表的邮件中强调现在的文档仍然出于草稿状态:



一如即往地欢迎提出意见和建议。在我们进一步研究如何使用它的过程中,API 也许会发生一些改变,我们希望在此过程中能发现更合适的方法名。
目前人们都期待着 JSR-166y 被纳入 Java 7,成为该平台的一部分。

查看英文原文:New Java Concurrency Feature: Phasers

Java语言 & 开发架构