La esencia de la tarea es demostrar cómo un hilo puede señalar a otro. La forma más común es usar colas de bloqueo, pero aquí una señal no contiene información, por lo que un semáforo es suficiente.
Crear clase hilo que se parametriza con 2 Semáforos: entrada y salida:
class ThreadPrinter implements Runnable {
int counter;
Semaphore ins, outs;
ThreadPrinter(int counter, Semaphore ins, Semaphore outs) {
this.counter = counter;
this.ins = ins;
this.outs = outs;
}
@Override
public void run() {
for (int i = 0; i < 25; i++) {
ins.aquire(); // wait for permission to run
System.out.println("" + counter);
outs.release(); // allow another thread to run
counter += 2;
}
}
Crear 2 Semaphore
s y pasarlos a 2 hilos:
Semaphore a = new Semaphore(1); // first thread is allowed to run immediately
Semaphore b = new Semaphore(0); // second thread has to wait
ThreadPrinter tp1 = new ThreadPrinter(1, a, b);
ThreadPrinter tp2 = new ThreadPrinter(2, b, a);
Nota semáforos a
y b
se pasan en diferente orden
¿Usted sabe cómo escribir un programa con dos hilos? Si no, mira tu tutorial favorito para enhebrar. Si es así, intente escribir tal programa y vea qué sucede. –
¿Es esto una tarea/tarea? –
Por cierto, si hice esta pregunta en una entrevista, espero que el solicitante mencione que esto es algo bastante estúpido de tratar de hacer con dos hilos.No está mal como una prueba de comprensión de las API de subprocesamiento, pero básicamente estás pidiendo a dos subprocesos que actúen de una sola vez. – yshavit