|
@@ -33,6 +33,9 @@ public class ReadWriteLock {
|
|
|
}
|
|
|
|
|
|
public int unRead() {
|
|
|
+ if (value.get() < 1) {
|
|
|
+ throw new RuntimeException("unread error");
|
|
|
+ }
|
|
|
return value.updateAndGet(unreadOperator);
|
|
|
}
|
|
|
|
|
@@ -95,21 +98,25 @@ public class ReadWriteLock {
|
|
|
public void run() {
|
|
|
for (int i = 0; i < 10000; i++) {
|
|
|
if (Math.random() < 0.7) {
|
|
|
- System.out.println("thread " + number + " read:" + lock.read());
|
|
|
+ System.out.println(
|
|
|
+ "[thread-" + number + "] read: " + lock.read() + "[" + System.currentTimeMillis() + "]");
|
|
|
try {
|
|
|
Thread.sleep(100 * ((i % 10) + 1));
|
|
|
} catch (InterruptedException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
- System.out.println("thread " + number + " unread:" + lock.unRead());
|
|
|
+ System.out.println("[thread-" + number + "] unread: " + lock.unRead() + "["
|
|
|
+ + System.currentTimeMillis() + "]");
|
|
|
} else {
|
|
|
- System.out.println("thread " + number + " write:" + lock.write());
|
|
|
+ System.out.println(
|
|
|
+ "[thread-" + number + "] write:" + lock.write() + "[" + System.currentTimeMillis() + "]");
|
|
|
try {
|
|
|
Thread.sleep(100 * ((i % 10) + 1));
|
|
|
} catch (InterruptedException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
- System.out.println("thread " + number + " unwrite:" + lock.unWrite());
|
|
|
+ System.out.println("[thread-" + number + "]unwrite: " + lock.unWrite() + "["
|
|
|
+ + System.currentTimeMillis() + "]");
|
|
|
}
|
|
|
}
|
|
|
}
|