Java: cómo se relacionan los ejecutores con las colas

Entonces, en la concurrencia de Java, existe el concepto de una tarea que es realmente cualquier implementación Runnableo Callable(y, más específicamente, el método run()o anulación call()de esa interfaz).

Me está costando entender la relación entre:

  • Una tarea ( Runnable/ Callable); y
  • A ExecutorServicela tarea se le envía; y
  • Una estructura de lista o cola de trabajo concurrente subyacente utilizada por ExecutorService

Creo que la relación es algo de lo siguiente:

  • Usted, el desarrollador, debe seleccionar qué ExecutorServiceestructura de trabajo se adapta mejor a la tarea en cuestión.
  • Inicializa el ExecutorService(digamos, como a ScheduledThreadPool) con la estructura subyacente a usar (digamos, un ArrayBlockingQueue) (si es así, ¿cómo?!?! )
  • Envías tu tarea a la ExecutorService que luego utiliza su estrategia de subprocesamiento / agrupación para llenar la estructura dada (ABQ o de otro modo) con copias de la tarea
  • Cada hilo generado / agrupado ahora extrae copias de la tarea de la estructura de trabajo y la ejecuta

En primer lugar, corrija / aclare cualquiera de los supuestos anteriores si estoy fuera de base en cualquiera de ellos.

Segundo, si la tarea simplemente se copia / replica una y otra vez dentro de la estructura de trabajo subyacente (p. Ej., Copias idénticas en cada índice de una lista), entonces, ¿cómo puede descomponer un gran problema en otros más pequeños (concurrentes)? En otras palabras, si la tarea simplemente realiza los pasos A - Z, y tiene un ABQ con 1,000 de esas tareas, ¿entonces cada subproceso simplemente no hará A - Z también? ¿Cómo se dice "algunos subprocesos deberían funcionar en A - G, mientras que otros subprocesos deberían funcionar en H y otros subprocesos deberían funcionar en I - Z", etc.?

Para este segundo, podría necesitar un ejemplo de código para visualizar cómo se combina todo. Gracias por adelantado.

Respuesta 1

Soy relativamente nuevo en GUI con Java y tengo un JFrame con una barra de menú simple con su típico botón Crear nuevo (Me gusta crear nuevo archivo y otras cosas). Quiero tenerlo así que cuando selecciono este botón ...

Basado en las respuestas a continuación: Todavía no está claro para mí: ¿Qué hace la construcción sincronizada en el Mapa concurrente, si es que lo hace? es decir, en el caso de un mapa concurrente, ¿cuál es la diferencia, si la hay ...

en Java SWING, la tecla "Tab" transfiere globalmente el foco entre todos los componentes. ¿Es posible modificar este comportamiento "predeterminado" de alguna manera? Entonces, en lugar de hacer que la tecla "Tab" cambie el foco, quiero ...

Considere este ejemplo: <% int testNumber = 1; %> // Algunos HTML van aquí <% = testNumber%> Me sale un error de compilación: testNumber no se puede resolver en una variable ¿Alguien puede explicar qué es ...