This article smells strongly of ad hominem attack. The professor who "hasn’t walked in the shoes of application programmers" is, of course, Doug Lea, the driving force behind the current java.util.concurrent package. The performance comparison smells of cherry-picking: parallel add over a Long array, really? The complexity criticism sounds a bit like "I don't understand this code! It must be bad!" He accuses the code of bit-twiddling. Oh my.
Is the author of this article also the author of a competing fork-join framework? Although it shouldn't invalidate the technical criticisms, an undeclared conflict of interest is a good way to sabotage your credibility.
My personal disappointment is the lack of expressiveness.<p>Here is a C# LINQ example:<p><pre><code> using System.Linq;
files.AsParallel().ForAll(file => ProcessXML(file));
</code></pre>
To achieve something similar in Java 7, one could start on perhaps with improving the java.util.Collection interface, or appropriate abstract children, by introducing the asParallel method that the Collection implementations could implement. One obvious problem I see is the lack of lambda support in Java 7, so one would have to pass an anonymous class into forXXX(..) instead which is a bit more clunky.
While I'm not necessarily disagreeing with everything in this article, there are an awful lot of assertions made that could really use some citations and illustrative examples to back them up.<p>The fact that the author is associated with a fork/join competitor and yet never acknowledges it also inflates my skepticism by a long way.
Given the author's reported experience I'm surprised there aren't more posts from him on the mailing list (<a href="http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest" rel="nofollow">http://altair.cs.oswego.edu/mailman/listinfo/concurrency-int...</a>) where this library, and all the other juc changes, have been discussed for years.
Coming from C background, there is OpenMP, with with a bunch of #pragma omp parallel for (and others) can easily turn suitable processes into data-parallel ones (for example lots of image processing could be sped up this way). On top of this, if you don't link with OpenMP it stays the old way (serializable).