ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/Mutex.java
Revision: 1.1
Committed: Mon May 2 19:19:38 2005 UTC (19 years ago) by dl
Branch: MAIN
Log Message:
Put misc performance tests into CVS

File Contents

# Content
1 /*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain, as explained at
4 * http://creativecommons.org/licenses/publicdomain
5 */
6
7 import java.util.*;
8 import java.util.concurrent.*;
9 import java.util.concurrent.locks.*;
10 import java.util.concurrent.atomic.*;
11 import java.io.*;
12
13 /**
14 * A sample user extension of AbstractQueuedSynchronizer.
15 */
16 public final class Mutex extends AbstractQueuedSynchronizer implements Lock, java.io.Serializable {
17 public boolean isHeldExclusively() { return getState() == 1; }
18
19 public boolean tryAcquire(int acquires) {
20 return compareAndSetState(0, 1);
21 }
22
23 public boolean tryRelease(int releases) {
24 setState(0);
25 return true;
26 }
27 public Condition newCondition() { return new ConditionObject(); }
28
29 private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
30 s.defaultReadObject();
31 setState(0); // reset to unlocked state
32 }
33
34 public void lock() {
35 acquire(1);
36 }
37 public boolean tryLock() {
38 return tryAcquire(1);
39 }
40 public void lockInterruptibly() throws InterruptedException {
41 acquireInterruptibly(1);
42 }
43 public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException {
44 return tryAcquireNanos(1, unit.toNanos(timeout));
45 }
46 public void unlock() { release(1); }
47 }