ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/LongMutex.java
Revision: 1.3
Committed: Tue Mar 15 19:47:05 2011 UTC (13 years, 2 months ago) by jsr166
Branch: MAIN
CVS Tags: release-1_7_0
Changes since 1.2: +1 -1 lines
Log Message:
Update Creative Commons license URL in legal notices

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/publicdomain/zero/1.0/
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 }