मेरे पास एक एक्जिक्यूटर है जो ArrayBlockingQueue से संदेशों का उपभोग करने के लिए ज़िम्मेदार है।java.util.concurrent पर थ्रेड को पार्क करने का कारण क्या हो सकता है। थ्रेडपूलएक्ससेटर.get टास्क
new ThreadPoolExecutor(1, 1, 0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1),
r -> {
return new Thread(r, "Request-Queue-Drainer");
});
अनुरोध-पंक्ति-Drainer धागा राज्य प्रतीक्षारत (कार्य इस सूत्र को प्रस्तुत किया जा रहा है हालांकि) में है। निम्नलिखित थ्रेड-डंप है।
Name: Request-Queue-Drainer
State: WAITING on java.u[email protected]5b4757a2
Total blocked: 0 Total waited: 8
Stack trace:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
धागे प्रतीक्षा स्थिति में होने का कारण क्या हो सकता है?
आपका क्या मतलब है, "कतार से संदेशों को निकालने के लिए ज़िम्मेदार?" आप यहां एक बहुत ही सामान्य दिख रहे 'थ्रेडपूल एक्स्सेलर' का निर्माण कर रहे हैं। आप इसे एक स्पष्ट 'थ्रेड फैक्ट्री' पास करते हैं, लेकिन एकमात्र चीज आपकी 'थ्रेड फैक्ट्री' डिफ़ॉल्ट थ्रेड फैक्ट्री से अलग होती है, यह प्रत्येक नए धागे को एक विशेष नाम देती है। –