public interface FixedSizeQueue { /** Checks the queue to see if it is empty @param none @return true if the queue is empty, false otherwise */ public boolean isEmpty(); /** Checks the queue to see if it is full @param none @return true if the queue if full, false otherwise */ public boolean isFull(); /** Adds an object to a (non-full) queue in a thread-safe fashion @param x is the object to be added to the queue @return void */ public void enqueue(Object x); /** Removes next object from the (non-empty) queue in a thread-safe fashion @param none @return Object returned is the element removed from the queue */ public Object dequeue(); /** you will also need a constructor with signature buffer (int n) that constructs a new empty queue with max capacity n and you will need to "synchronize" the enqueue and dequeue methods, so they don't try to modify the buffer variables at the same time. Do this by putting the keyword "synchonized" on the method signature line (right after the word "public". */ }