===Pseudocode===
FIXMEPriorityQueue       	public void waitForAccess(KThread thread)    	    add this thread to my waitQueue            thread.waitForAccess(this)            	public void acquire(KThread thread)     	    if I have a holder and I transfer priority, remove myself from the holder's resource list    	    thread.acquire(this)            	public KThread nextThread()     	    if I have a holder and I transfer priority, remove myself from the holder's resource list    	    if waitQueue is empty, return null            ThreadState firstThread = pickNextThread();            remove firstThread from waitQueue            firstThread.acquire(this);    	    return firstThread    	}    	    	public int getEffectivePriority()    	    if I do not transfer priority, return minimum priority    	    if (dirty)    	        effective = minimum priority;    	        for each ThreadState t in waitQueue    	            effective = MAX(effective, t.getEffectivePriority())    	        dirty = false;    	    return effective;    	        public void setDirty()            if I do not transfer priority, there is no need to recurse, return            dirty = true;            if I have a holder, holder.setDirty()            	protected ThreadState pickNextThread()             ThreadState ret = null            for each ThreadState ts in waitQueue               if ret is null OR ts has higher priority/time ranking than ret                  set ret to ts    	    return ret; ThreadState {     	public int getPriority()    	    return non-donated priority.        	public int getEffectivePriority()    	    if (dirty) {                effective = non-donated priority    	        for each PriorityQueue pq that I am currently holding    	          effective = MAX(effective, pq.getEffectivePriority)    	    }    	    return effective;     	public void setPriority(int priority) {    	    set non-donated priority to the argument    	    setDirty();    	}             public void setDirty() {            if already dirty return            dirty = true;            for each of the PriorityQueues pq I am waiting on,              pq.setDirty        }    	    	public void waitForAccess(PriorityQueue waitQueue) {    	    add the waitQueue to my waitingOn list    	    if the waitQueue was previously in myResources, remove it and set its holder to null.            if waitQueue has a holder, set the queue to dirty to signify possible change in the queue's effective priority    	    	public void acquire(PriorityQueue waitQueue) {    	    add waitQueue to myResources list    	    if waitQueue was in my waitingOn list, remove it    	    setWaitQueue's holder to me    	    setDirty();    	} 
==Boat.java==