aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorKeisuke Kuroynagi <ksk@google.com>2013-07-03 11:39:17 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-07-03 11:39:17 +0000
commit55de0bd981d6dc3ad4465c654d60072604ed1f9d (patch)
tree335fc5c7f35c5bbf601f0414feef1b5c3cf21e9b /java/src
parent0f276de04d3493a4777a29eebbc88253db427edb (diff)
parent0b1c08bf5aad0c6775acb1acb7048191854851ab (diff)
downloadlatinime-55de0bd981d6dc3ad4465c654d60072604ed1f9d.tar.gz
latinime-55de0bd981d6dc3ad4465c654d60072604ed1f9d.tar.xz
latinime-55de0bd981d6dc3ad4465c654d60072604ed1f9d.zip
Merge "Use ReentrantReadWriteLock in ExpandableBinaryDictionary."
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java33
1 files changed, 18 insertions, 15 deletions
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index a19363d54..f4c4c6533 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -35,7 +35,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.concurrent.locks.ReentrantLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* Abstract base class for an expandable dictionary that can be created and updated dynamically
@@ -151,14 +151,14 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
@Override
public void close() {
// Ensure that no other threads are accessing the local binary dictionary.
- mLocalDictionaryController.lock();
+ mLocalDictionaryController.writeLock().lock();
try {
if (mBinaryDictionary != null) {
mBinaryDictionary.close();
mBinaryDictionary = null;
}
} finally {
- mLocalDictionaryController.unlock();
+ mLocalDictionaryController.writeLock().unlock();
}
}
@@ -205,14 +205,14 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
final String prevWord, final ProximityInfo proximityInfo,
final boolean blockOffensiveWords) {
asyncReloadDictionaryIfRequired();
- if (mLocalDictionaryController.tryLock()) {
+ if (mLocalDictionaryController.readLock().tryLock()) {
try {
if (mBinaryDictionary != null) {
return mBinaryDictionary.getSuggestions(composer, prevWord, proximityInfo,
blockOffensiveWords);
}
} finally {
- mLocalDictionaryController.unlock();
+ mLocalDictionaryController.readLock().unlock();
}
}
return null;
@@ -225,11 +225,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
}
protected boolean isValidWordInner(final String word) {
- if (mLocalDictionaryController.tryLock()) {
+ if (mLocalDictionaryController.readLock().tryLock()) {
try {
return isValidWordLocked(word);
} finally {
- mLocalDictionaryController.unlock();
+ mLocalDictionaryController.readLock().unlock();
}
}
return false;
@@ -246,11 +246,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
}
protected boolean isValidBigramInner(final String word1, final String word2) {
- if (mLocalDictionaryController.tryLock()) {
+ if (mLocalDictionaryController.readLock().tryLock()) {
try {
return isValidBigramLocked(word1, word2);
} finally {
- mLocalDictionaryController.unlock();
+ mLocalDictionaryController.readLock().unlock();
}
}
return false;
@@ -293,9 +293,12 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
// Ensure all threads accessing the current dictionary have finished before swapping in
// the new one.
final BinaryDictionary oldBinaryDictionary = mBinaryDictionary;
- mLocalDictionaryController.lock();
- mBinaryDictionary = newBinaryDictionary;
- mLocalDictionaryController.unlock();
+ mLocalDictionaryController.writeLock().lock();
+ try {
+ mBinaryDictionary = newBinaryDictionary;
+ } finally {
+ mLocalDictionaryController.writeLock().unlock();
+ }
oldBinaryDictionary.close();
} else {
mBinaryDictionary = newBinaryDictionary;
@@ -390,7 +393,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
private final void syncReloadDictionaryInternal() {
// Ensure that only one thread attempts to read or write to the shared binary dictionary
// file at the same time.
- mSharedDictionaryController.lock();
+ mSharedDictionaryController.writeLock().lock();
try {
final long time = SystemClock.uptimeMillis();
final boolean dictionaryFileExists = dictionaryFileExists();
@@ -424,7 +427,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
}
mLocalDictionaryController.mLastUpdateTime = time;
} finally {
- mSharedDictionaryController.unlock();
+ mSharedDictionaryController.writeLock().unlock();
}
}
@@ -449,7 +452,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
* dictionary is out of date. Can be shared across multiple dictionary instances that access the
* same filename.
*/
- private static class DictionaryController extends ReentrantLock {
+ private static class DictionaryController extends ReentrantReadWriteLock {
private volatile long mLastUpdateTime = 0;
private volatile long mLastUpdateRequestTime = 0;