¿Cómo flujo paralelo "saber" para utilizar el ForkJoinPool encierra?

danielglickman66 :

En Java 8 se puede fijar un forkJoinPool personalizada para ser utilizado por corrientes paralelas en lugar de la piscina común.

forkJoinPool.submit(() -> list.parallelStream().forEach(x ->{...} ))

Mi pregunta es ¿cómo técnicamente suceda?
La corriente no es de ninguna manera consciente de que fue sometido a una costumbre forkJoinpool y no tiene acceso directo a la misma. Entonces, ¿cómo son los hilos correctos finalmente utilizados para el procesamiento de tareas de la corriente?

Traté de mirar el código fuente, pero en vano. Mi mejor conjetura es un conjunto variable de ThreadLocal en algún momento al presentar y luego utilizado por la corriente más adelante. Si es así, ¿por qué los desarrolladores del lenguaje elegir de tal manera de implementar el comportamiento en lugar de, por ejemplo, la dependencia de la inyección de la piscina en la corriente?

¡Gracias!

Eugene:

Por lo que he leído el código, las decisiones se hace solamente sobre la base de la rosca inicial que desencadena el cálculo, dentro del método ForkJoinTask::fork, que, literalmente, hace una comprobación contra de lo que dio origen a este hilo (también en él de documentación):

Thread.currentThread()) instanceof ForkJoinWorkerThread

Así que si una instancia de ForkJoinWorkerThreadque ha comenzado este (esto es lo que puede conseguir a través de una costumbre ForkJoinPool), cualquiera que sea el uso de la piscina ya existe y esta tarea en ejecución; de otro modo (si se trata de un hilo diferente que es no una instancia de ForkJoinWorkerThread) el uso:

ForkJoinPool.common.externalPush(this); 

También es interesante que ForkJoinWorkerThreades en realidad una publicclase, por lo que podría comenzar el cálculo dentro de una instancia de ella, pero aún así el uso de una piscina diferente; No, aunque he intentado esto.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=230069&siteId=1
Recomendado
Clasificación