Java并发新特性: Phasers

本周, 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并发新特性: Phasers)