Olá pessoal.
Tudo?
Foi-me fornecida uma classe em java que teoricamente implementa um channel.
O meu problema é que necessito fazer um exercicio mas não tou a perceber devido a essa classe.
A classe é a seguinte:
public class Channel {
public boolean available, done;
public int data;
public Waiter requested;
public static class Waiter {
public Channel done;
}
public static Channel waitForData(Channel[] channels) {
Waiter w = new Waiter();
for(Channel a: channels)
a.requestNotify(w);
synchronized(w) {
while(w.done == null)
try {
w.wait();
} catch(InterruptedException ioe) {}
return w.done;
}
}
public synchronized void requestNotify(Waiter w) {
requested = w;
if (available)
w.done = this;
}
public synchronized boolean isAvailable() {
return available;
}
public synchronized int read() throws InterruptedException {
while(!available)
wait();
int got = data;
done = true;
available = false;
notify();
return got;
}
public synchronized void write(int e) throws InterruptedException {
available = true;
data = e;
notify();
if (requested != null)
synchronized(requested) {
requested.done = this;
requested.notify();
}
while(!done)
wait();
done = false;
}
}
O que necessito fazer é o seguinte:
Implement a program to merge two sequences of data. A process receives data on two input channels and interleaves the data on one output channel. Implement a fair merge that is free from starvation of both input channels.
Eu criei uma classe writer em que recebe um arraylist e um channel. O que faço é enviar atraves desse metodo write cada posiçao do arraylist.
Agora não sei é como farei para ler. Ou seja como posso ler de dois canais devido a no enunciado pedir duas sequencias de dados.
Cumprimentos.