samples/reentrant/src/org/apidesign/reentrant/CriticalSectionSynchronizedWithNonReentrantLock.java
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/reentrant/src/org/apidesign/reentrant/CriticalSectionSynchronizedWithNonReentrantLock.java Sat Jun 14 09:54:36 2008 +0200
1.3 @@ -0,0 +1,43 @@
1.4 +package org.apidesign.reentrant;
1.5 +
1.6 +import java.nio.channels.NonReadableChannelException;
1.7 +import java.util.Collection;
1.8 +import java.util.concurrent.locks.Lock;
1.9 +
1.10 +public class CriticalSectionSynchronizedWithNonReentrantLock<T extends Comparable<T>> implements CriticalSection<T> {
1.11 + private T pilot;
1.12 + private int cnt;
1.13 + private Lock lock = new NonReentrantLock();
1.14 +
1.15 + public void assignPilot(T pilot) {
1.16 + lock.lock();
1.17 + try {
1.18 + this.pilot = pilot;
1.19 + } finally {
1.20 + lock.unlock();
1.21 + }
1.22 + }
1.23 +
1.24 + public int sumBigger(Collection<T> args) {
1.25 + lock.lock();
1.26 + try {
1.27 + for (T cmp : args) {
1.28 + if (pilot.compareTo(cmp) < 0) {
1.29 + cnt++;
1.30 + }
1.31 + }
1.32 + return cnt;
1.33 + } finally {
1.34 + lock.unlock();
1.35 + }
1.36 + }
1.37 +
1.38 + public int getCount() {
1.39 + lock.lock();
1.40 + try {
1.41 + return cnt;
1.42 + } finally {
1.43 + lock.unlock();
1.44 + }
1.45 + }
1.46 +}