Thread.join () no funciona cuando se ejecuta el hilo por ExecutorService

Vamos:

Este es mi código:

public static void main(String[] args) {
        System.out.println("program started");
        ExecutorService executor = Executors.newCachedThreadPool();
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("thread finished");
            }
        });
        executor.execute(thread);
        try {
            thread.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("thread joined");

    }

Cuando se inicia mi hilo como se muestra arriba, thread.join()no funciona y no espera a que el Hilo para ser terminado. Necesito ejecutar mi hilo por un ExecutorService y esperar a que el Hilo para ser terminado. pero mi código no funciona bien. ¿Alguien puede ayudarme?

¿Por qué no uso futuro en lugar de hilo ?

porque a veces tenga que interrumpir mi hilo y esperar a que el Hilo para ser terminado. pero cuando se cancela una Futuro , future.get()obtiene una excepción y no esperar a que la rosca para ser terminado.

Me disculpo de antemano si la gramática de la frase no es correcta. porque no puedo hablar bien Inglés.

GhostCat saludos Monica C.:

Respuesta simple: no hagas eso.

No mezclar capas de abstracciones de este tipo. La interfaz Ejecutor no lo hace execute()hilos. Se necesita Runnables . No importa que se pasa un objeto Thread a ella, el hilo no se utiliza en absoluto, además de una llamada al run()método.

Mezclando hilos de hierro desnudos "baja" de capa con un servicio Ejecutor abstraída es simplemente una mala idea.

El punto de ese grupo de subprocesos concepto es que usted no trata de controlar los hilos subyacentes. Simplemente no hay punto en la espera de un hilo combinado a extremo . Un grupo de subprocesos mantiene hilos alrededor, porque el establecimiento de hilos es un (relativamente) operaciones costosas. Para que no se terminan, sino que viven en, hacer otro trabajo en el futuro.

La verdadera respuesta: o bien no utilizan ese servicio ejecutor, o buscar una solución que funciona con ese concepto (sin que entran y haciendo cosas de bajo nivel en el lado).

Y el "verdadero real" respuesta: paso atrás, y nos dicen sobre el problema "real" que la intención de resolver de esta manera.

Supongo que te gusta

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