Dúvida acerca classe

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.