One point I'd like to raise about using java.util.concurrent and TPE: I think that over the long term, it makes sense to (re)use existing utilities which are being maintained by domain experts rather than custom utilities you've written yourself. The concurrent libraries available since Java 5 were written and maintained by people widely recognized to be very, very good at a very hard problem. That doesn't mean they, or the library, is perfect, just that there is value in building on their work and letting them take care of the bugs and optimizations over time. The downside would be that if a River user was stuck with, say, Java 5, they couldn't take advantage of bugfixes or improvements in Java 6. On the other hand, that's true of the entire JDK.
The max threads issue seems to me a non-issue. A JVM can allocate only so many native threads before it runs out of OS resources; that's a hard limit. You can set a max of Integer.MAX_VALUE but your VM would die long, long before it reached that. For me this is more of design policy decision. Re-use, intelligently and selectively, where possible, to reduce your project's workload. Patrick
