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

# User Rev Content
1 dl 1.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     }