es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java: enviar una ejecución a un hilo específico.

Estoy experimentando con hilos y me pregunto si es posible forzar a un hilo a ejecutar algo.

Entonces, lo que tengo es un método como este:

public void asyncSleep() {
    Supplier<boolean> sleeper = () -> {

    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
    }

    return true;
};

CompletableFuture<Boolean> promise = CompletableFuture.supplyAsync(sleeper, ex);
promise.thenAccept(u -> {
    System.out.println("thread=" + Thread.currentThread());
});


}

Y necesitaría que el hilo original (el que ejecuta el método asyncSleep()) sea el que ejecute el thenAccept. ¿Es eso posible? Y si es así, ¿cómo puedo hacerlo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible forzar a un hilo para que ejecute algo. Puede usar el método CompletableFuture.runAsync() para ejecutar una tarea en el mismo hilo que llamó al método asyncSleep(). Por ejemplo:

    public void asyncSleep() {
        Supplier<boolean> sleeper = () -> {
    
            try {
                Thread.sleep(4000);
            } catch (InterruptedException e) {
            }
    
            return true;
        };
    
        CompletableFuture<boolean> promise = CompletableFuture.supplyAsync(sleeper, ex);
        CompletableFuture.runAsync(() -> {
            promise.thenAccept(u -> {
                System.out.println("thread=" + Thread.currentThread());
            });
        }, ex);
    }
    

    En este ejemplo, el método runAsync() ejecutará el método thenAccept() en el mismo hilo que llamó al método asyncSleep().

Comments are closed.