7165762: (aio) Default thread pool should be configured so that threads terminated after a timeout period
Alan Bateman
Alan.Bateman at oracle.com
Fri Nov 30 05:40:22 PST 2012
This is something that we discussed here back in April [1].
To re-cap, the thread pool for the default channel group is a cached
thread pool where the threads don't terminate after an idle time. The
reason for that is because of support for Windows editions that didn't
support thread agnostic I/O (so we have to keep the threads alive,
otherwise any I/O operations that they initiated would abort when the
thread terminated). It was an oversight that this went into shared code
to be used for all platforms (including newer version of Windows where
this is not a concern).
As the older editions of Windows are dying out (Windows Server 2003 is
now in extended support, long superseded by Windows Server 2008 and
newer) then it's probably not worth refactoring this now and that the
simplest thing is to just change it to use Executors.newCachedThreadPool
so that all platforms get a thread pool where the threads to terminate
after an idle time. The patch with the trivial change to do this is
attached.
I've decided not to include a test case, mostly because it would take a
long time (>1min) and also would be a bit fragile when with residual
thread left behind by tests that were run previously in the same VM --
this is an issue that we've had in other areas where the thread count
changes for reasons attributable to other tests.
Thanks,
Alan.
diff --git a/src/share/classes/sun/nio/ch/ThreadPool.java
b/src/share/classes/sun/nio/ch/ThreadPool.java
--- a/src/share/classes/sun/nio/ch/ThreadPool.java
+++ b/src/share/classes/sun/nio/ch/ThreadPool.java
@@ -102,11 +102,7 @@ public class ThreadPool {
if (threadFactory == null)
threadFactory = defaultThreadFactory;
// create thread pool
- ExecutorService executor =
- new ThreadPoolExecutor(0, Integer.MAX_VALUE,
- Long.MAX_VALUE, TimeUnit.MILLISECONDS,
- new SynchronousQueue<Runnable>(),
- threadFactory);
+ ExecutorService executor =
Executors.newCachedThreadPool(threadFactory);
return new ThreadPool(executor, false, initialSize);
}
[1] http://mail.openjdk.java.net/pipermail/nio-dev/2012-April/001629.html
More information about the nio-dev
mailing list