को देखते हुए एक 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
के साथ एक ज्ञात विशेषता है, एक अनधिकृत गलत कॉन्फ़िगरेशन या यहां तक कि एक बग भी है?