提醒一下,优雅降级到单线程不可用。我之前也认为是因为Shorn的回答和邮件列表讨论导致的,但在为这个问题进行研究时发现并非如此。该机制既不在Java EE 7规范中,也不在glassfish 4.1中。即使另一个容器能够实现它,它也不具备可移植性。
您可以通过调用以下方法进行测试:
@Singleton
public class SomeSingleton {
public void fireStream() {
IntStream.range(0, 32)
.parallel()
.mapToObj(i -> String.format("Task %d on thread %s",
i, Thread.currentThread().getName()))
.forEach(System.out::println);
}
}
然后你会得到类似这样的东西:
Info: Task 20 on thread http-listener-1(4)
Info: Task 10 on thread ForkJoinPool.commonPool-worker-3
Info: Task 28 on thread ForkJoinPool.commonPool-worker-0
...
我还检查了Glassfish 4.1.1的源代码,并没有一个使用、或的地方。
这个机制可以添加到EE 8中,因为许多框架将利用jdk8的特性,但我不知道它是否是规范的一部分。
java.util.concurrent.ForkJoinPool.common.parallelism
系统属性设置为1
,可以以便携的方式实现优雅降级吗? - areus