Javolution 6.0.0 java
ReadWriteLockImpl.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util.internal.collection;
10 
11 import java.io.Serializable;
12 import java.util.concurrent.TimeUnit;
13 import java.util.concurrent.locks.Condition;
14 import java.util.concurrent.locks.Lock;
15 import java.util.concurrent.locks.ReadWriteLock;
16 
23 public final class ReadWriteLockImpl implements ReadWriteLock, Serializable {
24 
26  public final class ReadLock implements Lock, Serializable {
27  private static final long serialVersionUID = 0x600L; // Version.
28 
29  @Override
30  public void lock() {
31  try {
33  } catch (java.lang.InterruptedException e) {}
34  }
35 
36  @Override
37  public void lockInterruptibly() throws InterruptedException {
38  synchronized (ReadWriteLockImpl.this) {
39  if (writerThread == Thread.currentThread()) return; // Current thread has the writer lock.
40  while ((writerThread != null) || (waitingWriters != 0)) {
41  ReadWriteLockImpl.this.wait();
42  }
43  givenLocks++;
44  }
45  }
46 
47  @Override
48  public Condition newCondition() {
49  throw new UnsupportedOperationException();
50  }
51 
52  @Override
53  public boolean tryLock() {
54  throw new UnsupportedOperationException();
55  }
56 
57  @Override
58  public boolean tryLock(long time, TimeUnit unit)
59  throws InterruptedException {
60  throw new UnsupportedOperationException();
61  }
62 
63  @Override
64  public void unlock() {
65  synchronized (ReadWriteLockImpl.this) {
66  if (writerThread == Thread.currentThread()) return; // Itself is the writing thread.
67  assert (givenLocks > 0);
68  givenLocks--;
69  ReadWriteLockImpl.this.notifyAll();
70  }
71  }
72  }
73 
75  public final class WriteLock implements Lock, Serializable {
76  private static final long serialVersionUID = 0x600L; // Version.
77 
78  @Override
79  public void lock() {
80  try {
82  } catch (java.lang.InterruptedException e) {}
83  }
84 
85  @Override
86  public void lockInterruptibly() throws InterruptedException {
87  synchronized (ReadWriteLockImpl.this) {
89  while (givenLocks != 0) {
90  ReadWriteLockImpl.this.wait();
91  }
93  writerThread = Thread.currentThread();
94  }
95  }
96 
97  @Override
98  public Condition newCondition() {
99  throw new UnsupportedOperationException();
100  }
101 
102  @Override
103  public boolean tryLock() {
104  throw new UnsupportedOperationException();
105  }
106 
107  @Override
108  public boolean tryLock(long time, TimeUnit unit)
109  throws InterruptedException {
110  throw new UnsupportedOperationException();
111  }
112 
113  @Override
114  public void unlock() {
115  synchronized (ReadWriteLockImpl.this) {
116  writerThread = null;
117  ReadWriteLockImpl.this.notifyAll();
118  }
119  }
120  }
121 
122  private static final long serialVersionUID = 0x600L; // Version.
123  public final ReadLock readLock = new ReadLock();
124  public final WriteLock writeLock = new WriteLock();
125  private transient int givenLocks;
126  private transient int waitingWriters;
127  private transient Thread writerThread;
128 
129  @Override
130  public ReadLock readLock() {
131  return readLock;
132  }
133 
134  @Override
135  public WriteLock writeLock() {
136  return writeLock;
137  }
138 }
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.tryLock
boolean tryLock()
Definition: ReadWriteLockImpl.java:53
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock
Definition: ReadWriteLockImpl.java:26
javolution.util.internal.collection.ReadWriteLockImpl.writeLock
final WriteLock writeLock
Definition: ReadWriteLockImpl.java:124
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.tryLock
boolean tryLock(long time, TimeUnit unit)
Definition: ReadWriteLockImpl.java:58
javolution.util.internal.collection.ReadWriteLockImpl.waitingWriters
transient int waitingWriters
Definition: ReadWriteLockImpl.java:126
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.tryLock
boolean tryLock()
Definition: ReadWriteLockImpl.java:103
javolution.util.internal.collection.ReadWriteLockImpl.readLock
final ReadLock readLock
Definition: ReadWriteLockImpl.java:123
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.tryLock
boolean tryLock(long time, TimeUnit unit)
Definition: ReadWriteLockImpl.java:108
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.serialVersionUID
static final long serialVersionUID
Definition: ReadWriteLockImpl.java:76
javolution.util.internal.collection.ReadWriteLockImpl.writeLock
WriteLock writeLock()
Definition: ReadWriteLockImpl.java:135
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock
Definition: ReadWriteLockImpl.java:75
javolution.util.internal.collection.ReadWriteLockImpl
Definition: ReadWriteLockImpl.java:23
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.unlock
void unlock()
Definition: ReadWriteLockImpl.java:114
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.lockInterruptibly
void lockInterruptibly()
Definition: ReadWriteLockImpl.java:37
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.serialVersionUID
static final long serialVersionUID
Definition: ReadWriteLockImpl.java:27
javolution.util.internal.collection.ReadWriteLockImpl.writerThread
transient Thread writerThread
Definition: ReadWriteLockImpl.java:127
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.lockInterruptibly
void lockInterruptibly()
Definition: ReadWriteLockImpl.java:86
javolution.util.internal.collection.ReadWriteLockImpl.serialVersionUID
static final long serialVersionUID
Definition: ReadWriteLockImpl.java:122
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.newCondition
Condition newCondition()
Definition: ReadWriteLockImpl.java:48
javolution.util.internal.collection.ReadWriteLockImpl.readLock
ReadLock readLock()
Definition: ReadWriteLockImpl.java:130
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.lock
void lock()
Definition: ReadWriteLockImpl.java:30
javolution.util.internal.collection.ReadWriteLockImpl.givenLocks
transient int givenLocks
Definition: ReadWriteLockImpl.java:125
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.lock
void lock()
Definition: ReadWriteLockImpl.java:79
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.unlock
void unlock()
Definition: ReadWriteLockImpl.java:64
Thread
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.newCondition
Condition newCondition()
Definition: ReadWriteLockImpl.java:98