Java ejecutor de inicio del servicio de aplicación inicia cuando Hilos

Toby Zhou:

Cuando se crea un servicio de ejecutor (usando Executors.newFixedThreadPool (maxThreadNum) en java.util.concurrent) mis objeto inicia la aplicación. Cuando llegan solicitudes, el servicio ejecutor crea hebras para gestionar ellos.

Debido a que toma tiempo para crear hilos en tiempo de ejecución, quiero hacer subprocesos disponibles en el lanzamiento de la aplicación, de modo que cuando llegan solicitudes, se necesitaría menos tiempo para el proceso.

Lo que hice es lo siguiente:

executorService = Executors.newFixedThreadPool(200);
for (int i=0; i<200; i++) {
    executorService.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println("Start thread in pool " );
        }
    });
}

Se crea 200 hilos en la piscina ExecutorService cuando se inicia la aplicación.

maravilla simplemente se trata de una forma correcta de crear hilos al iniciar la aplicación? ¿O hay una mejor manera de hacerlo?

repollo:

Si usted puede utilizar un ThreadPoolExecutordirectamente en lugar de una ExecutorServicede Executors1 , entonces no hay tal vez una forma más estándar / compatible para iniciar todos los hilos de núcleo inmediatamente.

int nThreads = 200;
ThreadPoolExecutor executor = new ThreadPoolExecutor(nThreads, nThreads, 
        0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
executor.prestartAllCoreThreads();

Los usos anteriores prestartAllCoreThreads().

Tenga en cuenta que, actualmente, la aplicación del Executors.newFixedThreadPool(int)crea una ThreadPoolExecutoren exactamente la misma manera que antes. Esto significa que podría emitidos, técnicamente, el ExecutorServicedevueltos por el método de fábrica a una ThreadPoolExecutor. No hay nada en la documentación que garantiza que será una ThreadPoolExecutor, sin embargo.


1. ThreadPoolExecutorimplementos ExecutorService, pero proporciona una mayor funcionalidad. Además, muchos de los métodos de fábrica en Executorso bien vuelve una ThreadPoolExecutorforma directa o un envoltorio que los delegados a uno. Algunos, como newWorkStealingPool, utilice el ForkJoinPool. Una vez más, los tipos de retorno de estos métodos de fábrica son detalles de implementación por lo que no confían demasiado en él.

Supongo que te gusta

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