public synchronized T pop()
    {
        while(mList.isEmpty())
            try
            {
                wait();
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }

        T top = mList.removeHead().getValue();
        mTop = (Node<T>)mList.getListHead();

        return top;
    }