7165762: (aio) Default thread pool should be configured so that threads terminated after a timeout period (original) (raw)
Alan Bateman Alan.Bateman at oracle.com
Fri Nov 30 05:40:22 PST 2012
- Previous message: Review Request: JDK-7142921, (fs) Files.probeContentType reports a MIME type of "text/plain" on Ubuntu 11.04
- Next message: 7165762: (aio) Default thread pool should be configured so that threads terminated after a timeout period
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message: Review Request: JDK-7142921, (fs) Files.probeContentType reports a MIME type of "text/plain" on Ubuntu 11.04
- Next message: 7165762: (aio) Default thread pool should be configured so that threads terminated after a timeout period
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]