Métodos para Crear Hilos en Java

Formas de Instanciar Procesos Concurrentes

============

  1. Extendiendo la clase Thread y modificando el método ejecutar()

  1. Implementando la interfaz Runnable

  1. Implementando la interfaz Callible

  1. Clases anónimas y expresiones lambda

  1. Grupos de hilos

  1. Métodos asíncronos en Spring

  1. Temporizador (java.util.Timer)

A continuación se detalla cada método de implementación.

1.Extendiendo la clase Thread y modificando el método ejecutar()

public class ProcesoConcurrente01 extends Thread {

    @Override
    public void ejecutar() {
        System.out.println(Thread.currentThread().getName()+ " está en ejecución");
    }

    public static void main(String[] args) {
        new ProcesoConcurrente01().iniciar();
        new ProcesoConcurrente01().iniciar();
    }
}

2.Implementando la interfaz Runnable

public class ProcesoConcurrente02 implements Runnable {
    @Override
    public void ejecutar() {
        System.out.println(Thread.currentThread().getName() + " está en ejecución");
    }

    public static void main(String[] args) {
        new Thread(new ProcesoConcurrente02()).iniciar();
        new Thread(new ProcesoConcurrente02()).iniciar();
    }
}

3.Implementando la interfaz Callable

public class ProcesoConcurrente03 implements Callable<Long> {
    @Override
    public Long call() throws Exception {
        TimeUnit.SECONDS.sleep(1);
        System.out.println(Thread.currentThread().getName()+ " está en ejecución");
        return Thread.currentThread().getId();
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<Long> tarea = new FutureTask<>(new ProcesoConcurrente03());
        new Thread(tarea).iniciar();
        System.out.println("Esperando finalización");
        Long resultado = tarea.get();
        System.out.println("Resultado: " + resultado);
    }
}

4.Clases anónimas

public class ProcesoConcurrente04 {
    public static void main(String[] args) {
        // Clase anónima Runnable, implementando su método ejecutar()
        new Thread(new Runnable() {
            @Override
            public void ejecutar() {
                System.out.println(Thread.currentThread().getName() + " está en ejecución");
            }
        }).iniciar();

        // Equivalente usando expresión lambda
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + " está en ejecución");
        }).iniciar();
    }
}

5.Grupos de hilos

public class ProcesoConcurrente05 {
    public static void main(String[] args) {
        ExecutorService grupoHilos = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            grupoHilos.ejecutar(()-> System.out.println(Thread.currentThread().getName() + " está en ejecución"));
        }
    }
}

6.Métodos asíncronos en Spring

Primero, agregar la anotación @EnableAsync en la clase principal de SpringBoot

@SpringBootApplication
@EnableAsync
public class AplicacionPrincipal {
    public static void main(String[] args) {
        SpringApplication.run(AplicacionPrincipal.class, args);
    }
}

Luego, añadir la anotación @Async al método

@Service
public class ServicioProceso06 {

    @Async
    public void ejecutarProceso() {
        System.out.println(Thread.currentThread().getName() + " está en ejecución");
    }
}

Casos de prueba

@RunWith(SpringRunner.class)
@SpringBootTest(classes = AplicacionPrincipal.class)
public class PruebaProceso06 {
    @Autowired
    private ServicioProceso06 servicioProceso06;

    @Test
    public void prueba() {
        servicioProceso06.ejecutarProceso();
        servicioProceso06.ejecutarProceso();
    }
}

7.Temporizador (java.util.Timer)

public class ProcesoConcurrente07 {
    public static void main(String[] args) {
        Timer temporizador = new Timer();
        // Ejecutar cada 1 segundo
        temporizador.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + " está en ejecución");
            }
        }, 0 , 1000);
    }
}

Etiquetas: java hilos concurrencia threading ejecutor

Publicado el 6-11 03:44