ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/Mutex.java
Revision: 1.4
Committed: Wed Dec 31 17:00:58 2014 UTC (9 years, 4 months ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +2 -2 lines
Log Message:
lexicographic import order

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.io.*;
8 import java.util.*;
9 import java.util.concurrent.*;
10 import java.util.concurrent.atomic.*;
11 import java.util.concurrent.locks.*;
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 }