Así que estoy usando un BlockingQueue [ArrayBlockingQueue] de tamaño fijo en una aplicación tipo productor/consumidor, pero quiero que el usuario pueda cambiar el tamaño de la cola sobre la marcha. El problema es que no hay una implementación de BlockingQueue que permita cambiar la capacidad después de la creación. ¿Alguien se ha encontrado con esto antes? ¿Algunas ideas?Re-dimensionable Java BlockingQueue
Respuesta
Puede ampliar LinkedBlockingQueue. Su límite es un límite suave (es decir, solo un cheque adicional) y puede hacer que esto sea algo que puede cambiar (deshabilitando el incorporado y poniendo el suyo propio)
La solución más obvia (puede o no ser apropiado dependiendo de sus circunstancias) sería simplemente crear una instancia de una nueva cola con la capacidad actualizada que desee. Luego, envía todo desde la cola anterior a la nueva cola.
Si hace eso, todos los subprocesos con una referencia a la cola anterior serán bloqueados esperando nuevos contenidos en la cola anterior en lugar de nuevos contenidos en la nueva cola. –
@bkail: Es por eso que dije "dependiendo de tus circunstancias". Si el OP tiene numerosas referencias a la cola de bloqueo, entonces tendrá que refactorizar para que esta solución funcione (por ejemplo, envolviendo la cola en sí misma dentro de un objeto contenedor que actúa como una cola externamente pero realiza nuevas asignaciones internamente cuando la capacidad es cambiado). –
- 1. Java NIO Pipe vs BlockingQueue
- 2. Go channel vs Java BlockingQueue
- 3. C++ Equivalente a BlockingQueue de Java
- 4. Android Looper vs BlockingQueue?
- 5. BlockingQueue - métodos de drainTo() bloqueados
- 6. Emulación de marco redimensionable
- 7. GWT redimensionable panel
- 8. ¿Necesito sincronización adicional cuando uso un BlockingQueue?
- 9. ¿Línea divisible redimensionable en wxpython?
- 10. Jquery diseño redimensionable no funciona
- 11. jQuery mango redimensionable z-index
- 12. Alternativas a jQuery UI redimensionable
- 13. jQuery-UI Redimensionable: escalar todos los elementos de tamaño en proporcionalidad con div redimensionable
- 14. jQuery UI redimensionable - Cómo espesar la manija
- 15. C# win formularios make controls redimensionable
- 16. Recorte de rectángulo redimensionable de Android
- 17. ¿Cómo hacer la última gtk.TreeViewColumn redimensionable?
- 18. Implementando un área de texto redimensionable?
- 19. jQuery UI redimensionable no funciona en absoluto
- 20. borde de ventana no redimensionable y posicionamiento
- 21. C#: hacer un formulario no redimensionable
- 22. jQuery UI redimensionable - dirección de operación
- 23. ¿Cómo puedo hacer que una ventana LWJGL sea redimensionable?
- 24. Cómo liberar inmediatamente los hilos que esperan en un BlockingQueue
- 25. Cómo personalizar el comportamiento de bloqueo de BlockingQueue
- 26. ¿Cómo se interrumpe una BlockingQueue que está bloqueando en take()?
- 27. ¿Cuál es el mejor búfer de bytes redimensionable disponible en Java?
- 28. QDialog no redimensionable con tamaño fijo en Qt?
- 29. ¿Cómo hacer una herramienta de selección de rectángulo redimensionable?
- 30. iPhone - ¿Cómo se hace un rectángulo redimensionable para recortar imágenes?
Esto no es posible sin copiar/pegar gran parte del código interno. Realmente tendría que llevar una motosierra a una implementación separada, por ejemplo, la de Apache Harmony. – jbellis
@jbellis ¿por qué necesitarías copiar el código para subclase? –
Aquí no puede obtener la funcionalidad deseada mediante la creación de subclases; demasiado es final/privado. – jbellis