jtulach@111: package org.apidesign.reentrant; jtulach@111: jtulach@111: import java.nio.channels.NonReadableChannelException; jtulach@111: import java.util.Collection; jtulach@111: import java.util.concurrent.locks.Lock; jtulach@111: jtulach@111: public class CriticalSectionSynchronizedWithNonReentrantLock> implements CriticalSection { jtulach@111: private T pilot; jtulach@111: private int cnt; jtulach@111: private Lock lock = new NonReentrantLock(); jtulach@111: jtulach@111: public void assignPilot(T pilot) { jtulach@111: lock.lock(); jtulach@111: try { jtulach@111: this.pilot = pilot; jtulach@111: } finally { jtulach@111: lock.unlock(); jtulach@111: } jtulach@111: } jtulach@111: jtulach@111: public int sumBigger(Collection args) { jtulach@111: lock.lock(); jtulach@111: try { jtulach@111: for (T cmp : args) { jtulach@111: if (pilot.compareTo(cmp) < 0) { jtulach@111: cnt++; jtulach@111: } jtulach@111: } jtulach@111: return cnt; jtulach@111: } finally { jtulach@111: lock.unlock(); jtulach@111: } jtulach@111: } jtulach@111: jtulach@111: public int getCount() { jtulach@111: lock.lock(); jtulach@111: try { jtulach@111: return cnt; jtulach@111: } finally { jtulach@111: lock.unlock(); jtulach@111: } jtulach@111: } jtulach@111: }