ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/LongMutex.java
Revision: 1.2
Committed: Thu Oct 29 23:09:07 2009 UTC (14 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.1: +8 -8 lines
Log Message:
whitespace

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 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 }