public class CubbyHole {
    private int contents;
    private boolean available = false;

    public synchronized int get() {
        while (available == false) {
            try {
		Long l = new Long(ProducerConsumerTest.TS.getTimestamp().getTime());
		ProducerConsumerTest.LC.writeRecord (Thread.currentThread().getName(),  l.toString(), " entered wait() in get()");
                wait();
		l = new Long(ProducerConsumerTest.TS.getTimestamp().getTime());
		ProducerConsumerTest.LC.writeRecord (Thread.currentThread().getName(),  l.toString(), " exited wait() in get()");
            } catch (InterruptedException e) { }
        }
        available = false;
        notifyAll();
        return contents;
    }

    public synchronized void put(int value) {
        while (available == true) {
            try {
	Long l = new Long(ProducerConsumerTest.TS.getTimestamp().getTime());
	ProducerConsumerTest.LC.writeRecord (Thread.currentThread().getName(),  l.toString(), " entered wait() in put()");
                wait();
	l = new Long(ProducerConsumerTest.TS.getTimestamp().getTime());
	ProducerConsumerTest.LC.writeRecord (Thread.currentThread().getName(),  l.toString(), " exited wait() in put()");
            } catch (InterruptedException e) { }
        }
        contents = value;
        available = true;
        notifyAll();
    }
}
