¿Cómo puedo estructurar un código multiproceso para una mejor reutilización del código en Java?

Usted podría:

  1. Cree Thread1y Thread2extienda la misma clase base abstracta y mueva la lógica compartida al padre (herencia).
  2. Cree una interfaz común que implementen ambas clases y que contenga los métodos comunes, luego cree una clase separada que implemente Runnablee implemente run()allí (composición).

Siempre debe favorecer la composición sobre la herencia, por lo que la segunda opción suele ser mejor, porque también le brinda la flexibilidad de cambiar el comportamiento en tiempo de ejecución.

Por ejemplo: cree primero una interfaz compartida

public interface SharedTask {
    public void method1();
    public void method2();
}

Hacer que ambas clases lo implementen: public class Thread1 implements SharedTasky public class Thread2 implements SharedTask.

public class Worker implements Runnable {

    public Worker (SharedTask task) {
        this.task = task;
        ...
    }

    public void run() {
        task.method1();
        task.method2();
    }
}

En otra parte de su código: new Worker().start();

Respuesta 1

Casi nunca desea crear y lanzar los subprocesos usted mismo. Simplemente implemente Runnable (o, si lo prefiere, invocable). Luego, envíelos a un ExecutorService , que proporciona todo tipo de opciones interesantes para la cantidad de subprocesos que está ejecutando (y una buena ubicación central para cambiar esto en el futuro si sus necesidades cambian), vínculos a un CompletionService, etc.

Respuesta: 2

Cree una clase abstracta que se implemente Runnablecon el código que desea en su método de ejecución, luego extienda esa clase tantas veces como necesite la misma funcionalidad en su método de ejecución.

Respuesta: 3

Tengo un archivo de registro que se actualiza constantemente con nuevas líneas de datos. Necesito obtener nuevos datos agregados en Java tan pronto como estén escritos. Por ahora mi solución es: public static void readNonStop (String ...

Me gustaría aplicar el mismo efecto que shell.setAlpha (240), sin embargo, estuve navegando por Internet durante un par de horas y todavía no encontré la solución. Motivo: decidí mejorar la apariencia visual ...

En Powermock hay un método cuando Nuevo. Soy nuevo en Jmockit. Estoy migrando mi aplicación de Powermock a Jmockit. ¿Puede decirme cuál es el equivalente para cuándo Nuevo en Jmockit o cómo ...

Tengo una aplicación Java en funcionamiento que puede encontrar el archivo creado más recientemente en una carpeta. Mi objetivo final es tener esa aplicación en una página web para que cuando un usuario abra la página web, la página provoque el más reciente ...