ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/LongMutex.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 AbstractQueuedLongSynchronizer.
15     */
16     public final class LongMutex extends AbstractQueuedLongSynchronizer implements Lock, java.io.Serializable {
17     static final long LOCKED = -1L;
18     public boolean isHeldExclusively() { return getState() == LOCKED; }
19    
20     public boolean tryAcquire(long acquires) {
21     return compareAndSetState(0, LOCKED);
22     }
23    
24     public boolean tryRelease(long releases) {
25     setState(0);
26     return true;
27     }
28     public Condition newCondition() { return new ConditionObject(); }
29    
30     private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
31     s.defaultReadObject();
32     setState(0); // reset to unlocked state
33     }
34    
35     public void lock() {
36     acquire(LOCKED);
37     }
38     public boolean tryLock() {
39     return tryAcquire(LOCKED);
40     }
41     public void lockInterruptibly() throws InterruptedException {
42     acquireInterruptibly(LOCKED);
43     }
44     public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException {
45     return tryAcquireNanos(LOCKED, unit.toNanos(timeout));
46     }
47     public void unlock() { release(LOCKED); }
48     }