[concurrency-interest] ThreadPoolExecutor'sallowCoreThreadTimeOut

David Holmes dcholmes at optusnet.com.au
Mon Aug 27 22:13:50 EDT 2007


Moran,

It is a known bug: 6458662

It is fixed in Java 7 but not Java 6.

David
  -----Original Message-----
  From: concurrency-interest-bounces at cs.oswego.edu
[mailto:concurrency-interest-bounces at cs.oswego.edu]On Behalf Of Moran
Avigdor
  Sent: Monday, 27 August 2007 10:23 PM
  To: dholmes at ieee.org; concurrency-interest at cs.oswego.edu
  Subject: Re: [concurrency-interest]
ThreadPoolExecutor'sallowCoreThreadTimeOut


  David,



  Thank you for looking into this. I have written a recreation code to ease
our discussion.

  We are using the latest 1.6.0_02-b06 on a windows machine.



  The code opens a ThreadPoolExecutor with a capacity limited
LinkedBlockingQueue in order

  to trigger pool sizing. The code checks that the number of pool threads
does not go below the

  Core pool size.



  The following is the output when it fails.



  ThreadPoolExecutor with:

   CORE_POOL_SIZE = 4

   MAX_POOL_SIZE = 16

   KEEP_ALIVE_TIMEOUT = 10

   QUEUE_SIZE = 2



   java -verions: 1.6.0_02

  ------------------------------------------------------

  ...



  Pool Threads: 7

  java.lang.ThreadGroup[name=main,maxpri=10]

      Thread[main,5,main]

      Thread[pool-1-thread-1,5,main]

      Thread[pool-1-thread-2,5,main]

      Thread[pool-1-thread-3,5,main]

      Thread[pool-1-thread-4,5,main]

      Thread[pool-1-thread-5,5,main]

      Thread[pool-1-thread-6,5,main]

      Thread[pool-1-thread-7,5,main]





  Pool Threads: 0

  java.lang.ThreadGroup[name=main,maxpri=10]

      Thread[main,5,main]





  Exception in thread "main" java.lang.IllegalStateException: core pool size
is below minimum, expected: 4 actual: 0

        at test.TestTPE.monitorPoolThreads(TestTPE.java:117)

        at test.TestTPE.main(TestTPE.java:17)



  Just a final note - if you run this exact test with java 1.5 (e.g.
1.5.0_12) this does not happen.



  Thank you for your time.

  Moran Avigdor






----------------------------------------------------------------------------
--

  From: David Holmes [mailto:dcholmes at optusnet.com.au]
  Sent: Monday, August 27, 2007 12:50 AM
  To: Moran Avigdor; concurrency-interest at cs.oswego.edu
  Subject: RE: [concurrency-interest] ThreadPoolExecutor's
allowCoreThreadTimeOut



  Moran,



  How you were actually constructing the ThreadPoolExecutor?



  David Holmes

    -----Original Message-----
    From: concurrency-interest-bounces at cs.oswego.edu
[mailto:concurrency-interest-bounces at cs.oswego.edu]On Behalf Of Moran
Avigdor
    Sent: Sunday, 26 August 2007 7:27 PM
    To: concurrency-interest at cs.oswego.edu
    Subject: [concurrency-interest] ThreadPoolExecutor's
allowCoreThreadTimeOut

    I have noticed some strange behavior using the ThreadPoolExecutor when
moving to java 1.6 (1.6.0_02-b06 on windows xp)

    Core pool threads were being terminated although I was explicitly
setting the core pool size:



    ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long
keepAliveTime,  TimeUnit unit,

                                  BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory)



    I noticed it when JConsole was up and monitoring the thread consumption.
After my 1 min timeout, all threads were terminated.



In 1.6, the new allowCoreThreadTimeOut(boolean value) will in fact explain
this behavior if value is set to true - But I am not explicitly calling it,
but instead using the constructor above.



 I should not that on a linux running 1.6.0-rc-b104 it seemed to have
behaved as expected.Is anyone aware of such a fix or a known issue?  Thanks
in advance.

    ---

    Moran


-------------- next part --------------
An HTML attachment was scrubbed...
URL: /pipermail/attachments/20070828/f5fcebb2/attachment-0001.html 


More information about the Concurrency-interest mailing list