IllegalMonitorStateException when unlocking ReentrantLock on Android

I am using ReentrantLock with recommended practice (lock then actual code in try-block and then unlock, see sample code below). Sometimes (very rarely) I have a java.lang.IllegalMonitorStateException while unlocking. Why is this happening? Perhaps it has something to do with the Java implementation in Java.

Mistake:

java.lang.IllegalMonitorStateException
java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:126)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1232)
at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:430)
at com.example.dummy.backend.model.Model.unlock(Model.java:283)
at com.example.dummy.backend.engine.Engine.removeOldInstances(Engine.java:712)
at com.example.dummy.backend.engine.Engine$ProcessOnResumeWorkInBackground.doInBackground(Engine.java:836)
at com.example.dummy.backend.engine.Engine$ProcessOnResumeWorkInBackground.doInBackground(Engine.java:790)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)

      

Sample code (slightly simplified):

myLock.lock();
try {
        LinkedList<MyClass> myClassInstances = model.getMyClassInstances();
        Iterator<MyClass> iterator = myClassInstances.iterator();
        while (iterator.hasNext()) {
                MyClass myClassInstance = iterator.next();
                boolean toBeRemoved = true; // simple condition here
                if (toBeRemoved) {
                        logger.info("Removing old myClassInstance " + myClassInstance.getTimestamp());
                        iterator.remove();
                        Cache.removeMyClassByCodeAndTimestamp(myClassInstance);
                }
        }
} finally {
        myLock.unlock();
}

      

+3
java android synchronization reentrantlock


source to share


No one has answered this question yet

Check out similar questions:

3606
Close / hide Android soft keyboard
3295
Why is the Android emulator so slow? How can we speed up the development of an Android emulator?
3288
Correct use cases for Android UserManager.isUserAGoat ()?
2609
Is there a unique identifier for an Android device?
2510
How to persist android activity state by persisting instance state?
2097
Is there a way to run Python on Android?
6
How to avoid IllegalMonitorState exception when using lockInterruptibly on Reentrantlock
3
Error using Jaybird and Android
1
Android Textview render html with many images throwing out of memory exception
0
Gcm Register AsyncTask crasch android 2.3.7



All Articles
Loading...
X
Show
Funny
Dev
Pics