Desidero creare un pool di thread di dimensioni fisse che non ammetta attività nella coda. In altre parole, se il pool di thread è attualmente in uso, l'attività in arrivo deve essere rifiutata completamente. In base allo documentation, un modo per farlo, a mio avviso, sarebbe creare un oggetto fittizio Queue che rifiuta di ammettere un'attività. Qual è il modo idiomatico per realizzare questo in Java?ThreadPoolExecutor senza coda
risposta
È possibile utilizzare uno SynchronousQueue nel proprio ThreadPoolExector che è una coda che non contiene oggetti. Il pool di thread memorizzato nella cache lo utilizza perché crea nuovi thread su richiesta.
Se non può essere accodato, suggerirei di utilizzare lo RejectedExecutionHandler per eseguire l'attività nel thread corrente. In questo modo verrà sempre eseguito "immediatamente".
BTW: Sarebbe utile chiarire il motivo per cui si desidera eseguire questa operazione.
Puoi spiegare perché vuoi fare una cosa del genere? Lo scopo fondamentale di un TP + Q è quello di avere un "meccanismo di detenzione" automatico per il lavoro e disgiungere gli operatori dal processo di creazione del lavoro. Se il tuo intento è di avere solo tanti pacchetti di lavoro accettabili come lavoratori, allora non hai davvero bisogno di un TPE.
- 1. ThreadPoolExecutor Block quando la coda è piena?
- 2. Politica ThreadPoolExecutor
- 3. Strategia Java ThreadPoolExecutor, 'Handoff diretto' con la coda?
- 4. ThreadPoolExecutor con coda illimitata che non crea nuovi thread
- 5. specificando problema ThreadPoolExecutor
- 6. Lavoro/Task Stealing ThreadPoolExecutor
- 7. Celery vs. ProcessPoolExecutor/ThreadPoolExecutor
- 8. Deadlock in ThreadPoolExecutor
- 9. Attività futura respinta da ThreadPoolExecutor
- 10. Gestione delle eccezioni per ThreadPoolExecutor
- 11. Come gestire RejectedExecutionException con ThreadPoolExecutor in java
- 12. Java ExecutorService e ThreadPoolExecutor
- 13. ThreadPoolExecutor con ArrayBlockingQueue
- 14. Come rimuovere le vecchie attività in coda in ThreadPoolExecutor e inserire invece nuove attività?
- 15. Il mio ThreadPoolExecutor perde memoria?
- 16. Eliminazione programmatica della ricaduta senza coda
- 17. testa JavaScript e coda array senza mutazione
- 18. Qual è l'uso di allowCoreThreadTimeout() in ThreadPoolExecutor?
- 19. È buona norma impostare allowCoreThreadTimeOut() in ThreadPoolExecutor?
- 20. Impossibile creare ThreadPoolExecutor dal contesto dell'applicazione Spring
- 21. JAVA - Annulla le attività eseguibili di ThreadPoolExecutor
- 22. Come posso cancellare lavori specifici dalla coda di Resque senza cancellare l'intera coda?
- 23. Perché ThreadPoolExecutor riduce i thread sotto corePoolSize dopo keepAliveTime?
- 24. Eliminazione coda di coda in Mono
- 25. Coda ordinaria contro coda SEDA
- 26. Ottenere una coda senza fornire tutte le sue proprietà
- 27. Coda coda messaggi JS su Heroku
- 28. Quando si specificano le dimensioni del pool principale e massimo in ThreadPoolExecutor una buona idea?
- 29. Efficiente coda in Haskell
- 30. Coda C++ con dipendenze
L'attività può essere prelevata da un altro executor del pool di thread con thread liberi, anziché attendere nella coda del primo. Cosa dovrei usare al posto di un ThreadPoolExecutor? –
Se si desidera controllare l'esecuzione, TPE non è la vostra scelta. È meglio disporre di una semplice raccolta di thread di lavoro a cui è possibile consegnare il lavoro (se disponibili) un semplice Set che si costruisce e si tira/spinge i fili dentro e fuori dal thread principale. –
vivekv