2016-01-05 5 views
7

को देखते हुए एक ScheduledThreadPoolExecutor है कि एक साधारण कार्य हर पांच सेकंड चलाता है के निम्नलिखित विन्यास है:ScheduledThreadPoolExecutor एक CPU पर 100% लोड का कारण बनता है कोर

int corePoolSize = 0; 
ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(corePoolSize); 

Runnable task =() -> System.out.println("XXX"); 
executor.scheduleAtFixedRate(task, 5, 5, TimeUnit.SECONDS); 

ओरेकल JRE 1.8.0_66 पर वहाँ के द्वारा बनाई गई एक धागा है ScheduledThreadPoolExecutor जो लगातार एक सीपीयू कोर पर 100% भार का कारण बनता है। धागा डंप की जांच से पता चलता है निम्नलिखित स्टैकट्रेस: ​​

"pool-1-thread-1" - Thread [email protected] 
    java.lang.Thread.State: RUNNABLE 
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.poll(ScheduledThreadPoolExecutor.java:809) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

corePoolSize = 1 के साथ वहाँ अभी भी पूल में एक धागा है। हालांकि, धागा मूल रूप से हमेशा TIMED_WAITING में रहता है और इस प्रकार निष्क्रिय होता है।

ScheduledThreadPoolExecutor का व्यवहार corePoolSize = 0 के साथ एक ज्ञात विशेषता है, एक अनधिकृत गलत कॉन्फ़िगरेशन या यहां तक ​​कि एक बग भी है?

उत्तर

8

ऐसा लगता है कि आपने JDK-8129861 को हिट किया है जिसे जावा 9 में तय किया गया है। यह JDK-8022642 से भी संबंधित हो सकता है।

संबंधित मुद्दे