2012-04-17 15 views
7

Quiero crear un grupo de subprocesos de tamaño fijo que no admite ninguna tarea en su cola. En otras palabras, si el grupo de subprocesos está actualmente en uso, la tarea entrante debe rechazarse directamente. Basado en el documentation, una forma de hacer esto, en mi opinión, sería crear un objeto ficticio Queue que se niega a admitir una tarea. ¿Cuál es la forma idiomática de lograr esto en Java?ThreadPoolExecutor sin cola

Respuesta

10

Puede usar un SynchronousQueue en su ThreadPoolExector, que es una cola que no contiene objetos. El grupo de subprocesos en caché usa esto porque crea nuevos subprocesos a pedido.

Si no se puede poner en cola, pero sugeriría usar el RejectedExecutionHandler para ejecutar la tarea en el hilo actual. De esta manera siempre se ejecutará "inmediatamente".

BTW: Sería útil dejar en claro por qué quieres hacer esto.

0

¿Puede explicar en detalle por qué quiere hacer tal cosa? El propósito fundamental de un TP + Q es tener un "mecanismo de retención" automático para el trabajo y desacoplar a los trabajadores del proceso de creación de trabajo. Si su intención es solo tener tantos paquetes de trabajo aceptables como trabajadores, entonces realmente no necesita un TPE.

+0

La tarea se puede recoger con otro ejecutor de grupo de subprocesos con subprocesos libres, en lugar de esperar en la cola del primero. ¿Qué debería estar usando en lugar de un ThreadPoolExecutor? –

+0

Si desea controlar la ejecución, entonces TPE no es su elección. Es mejor que tenga una colección simple de subprocesos de trabajo a la que puede entregar el trabajo (si están disponibles) un conjunto simple que usted construye y tira/empuja los trozos dentro y fuera del hilo principal. – vivekv

Cuestiones relacionadas