L'essenza del compito è dimostrare come un thread può segnalarne un altro. Il modo più comune è usare le code di blocco, ma qui un segnale non porta alcuna informazione, quindi un semaforo è sufficiente.
Crea classe thread che è parametrizzato con 2 semafori: ingresso e uscita:
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;
}
}
Crea 2 Semaphore
s e passarle a 2 fili:
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);
Note semafori a
e b
vengono passati in ordine diverso.
fonte
2013-03-11 12:34:21
Sai come scrivere un programma con due fili? In caso contrario, guarda il tuo tutorial di threading preferito. Se è così, prova a scrivere un programma del genere e guarda cosa succede. –
È un compito a casa/compito? –
Btw, se avessi fatto questa domanda in un'intervista, mi auguro che il richiedente possa dire che questa è una cosa piuttosto stupida da provare con due thread.Non è male come test di comprensione delle API di threading, ma fondamentalmente stai chiedendo a due thread di agire in modo single-thread. – yshavit