From 94ae08701bbd7585a0b7e5a92d1975965a503c03 Mon Sep 17 00:00:00 2001 From: Dennis Kao <ulysseskao@gmail.com> Date: Wed, 15 Jan 2014 11:28:52 +0800 Subject: [PATCH] Merge branch 'origin/2.1.x' --- xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Lock.java | 113 +++++++++++++++++++------------------------------------- 1 files changed, 38 insertions(+), 75 deletions(-) diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Lock.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Lock.java index 58f9f73..2bd43f6 100644 --- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Lock.java +++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Lock.java @@ -14,10 +14,9 @@ * * @author Ulysses * @version 0.1 - * @since 2006/5/18 �W�� 10:27:24 + * @since 2006/5/18 */ -public class Lock -{ +public class Lock { Logger logger = LogManager.getLogger("com.ximple.io.dgn7"); /** @@ -42,20 +41,16 @@ * @return * @throws java.io.IOException */ - synchronized boolean canRead() throws IOException - { - if ((writer != null) && (writer != Thread.currentThread())) - { + synchronized boolean canRead() throws IOException { + if ((writer != null) && (writer != Thread.currentThread())) { return false; } - if (writer == null) - { + if (writer == null) { return true; } - if (owners.size() > 1) - { + if (owners.size() > 1) { return false; } @@ -69,22 +64,17 @@ * @return * @throws IOException */ - synchronized boolean canWrite() throws IOException - { - if (owners.size() > 1) - { + synchronized boolean canWrite() throws IOException { + if (owners.size() > 1) { return false; } - if ((canRead()) && ((writer == Thread.currentThread()) || (writer == null))) - { - if (owners.isEmpty()) - { + if ((canRead()) && ((writer == Thread.currentThread()) || (writer == null))) { + if (owners.isEmpty()) { return true; } - if (owners.containsKey(Thread.currentThread())) - { + if (owners.containsKey(Thread.currentThread())) { return true; } } @@ -98,17 +88,12 @@ * * @throws IOException */ - public synchronized void lockRead() throws IOException - { - if (!canRead()) - { - while ((writeLocks > 0) || (writer != null)) - { - try - { + public synchronized void lockRead() throws IOException { + if (!canRead()) { + while ((writeLocks > 0) || (writer != null)) { + try { wait(); - } catch (InterruptedException e) - { + } catch (InterruptedException e) { throw (IOException) new IOException().initCause(e); } } @@ -119,11 +104,9 @@ Thread current = Thread.currentThread(); Owner owner = (Owner) owners.get(current); - if (owner != null) - { + if (owner != null) { owner.timesLocked++; - } else - { + } else { owner = new Owner(current); owners.put(current, owner); } @@ -131,10 +114,8 @@ logger.debug("Start Read Lock:" + owner); } - private void assertTrue(String message, boolean b) - { - if (!b) - { + private void assertTrue(String message, boolean b) { + if (!b) { throw new AssertionError(message); } } @@ -143,8 +124,7 @@ * Called by ShapefileReader after a read is complete and after the IOStream * is closed. */ - public synchronized void unlockRead() - { + public synchronized void unlockRead() { assertTrue("Current thread does not have a readLock", owners.containsKey(Thread.currentThread())); Owner owner = (Owner) owners.get(Thread.currentThread()); @@ -152,8 +132,7 @@ assertTrue("Current thread has " + owner.timesLocked + "negative number of locks", owner.timesLocked > 0); owner.timesLocked--; - if (owner.timesLocked == 0) - { + if (owner.timesLocked == 0) { owners.remove(Thread.currentThread()); } @@ -167,33 +146,26 @@ * * @throws IOException */ - public synchronized void lockWrite() throws IOException - { + public synchronized void lockWrite() throws IOException { Thread currentThread = Thread.currentThread(); - if (writer == null) - { + if (writer == null) { writer = currentThread; } - while (!canWrite()) - { - try - { + while (!canWrite()) { + try { wait(); - } catch (InterruptedException e) - { + } catch (InterruptedException e) { throw (IOException) new IOException().initCause(e); } - if (writer == null) - { + if (writer == null) { writer = currentThread; } } - if (writer == null) - { + if (writer == null) { writer = currentThread; } @@ -206,28 +178,23 @@ /** * default visibility for tests */ - synchronized int getReadLocks(Thread thread) - { + synchronized int getReadLocks(Thread thread) { Owner owner = (Owner) owners.get(thread); - if (owner == null) - { + if (owner == null) { return -1; } return owner.timesLocked; } - public synchronized void unlockWrite() - { - if (writeLocks > 0) - { + public synchronized void unlockWrite() { + if (writeLocks > 0) { assertTrue("current thread does not own the write lock", writer == Thread.currentThread()); assertTrue("writeLock has already been unlocked", writeLocks > 0); writeLocks--; - if (writeLocks == 0) - { + if (writeLocks == 0) { writer = null; } } @@ -239,24 +206,20 @@ /** * default visibility for tests */ - synchronized boolean ownWriteLock(Thread thread) - { + synchronized boolean ownWriteLock(Thread thread) { return (writer == thread) && (writeLocks > 0); } - private class Owner - { + private class Owner { final Thread owner; int timesLocked; - Owner(Thread owner) - { + Owner(Thread owner) { this.owner = owner; timesLocked = 1; } - public String toString() - { + public String toString() { return owner.getName() + " has " + timesLocked + " locks"; } } -- Gitblit v0.0.0-SNAPSHOT