在我的应用程序中,我们正在为工作线程中的大约2000条记录执行applyBatch。
同时如果我旋转屏幕我会变黑屏幕。
"主@ 6280" prio = 5等待 java.lang.Thread.State:WAITING 阻止主要@ 6280 在java.lang.Object.wait(Object.java:-1) at java.lang.Thread.parkFor $(Thread.java:1220) - 已锁定< 0x18c5> (一个java.lang.Object) 在sun.misc.Unsafe.park(Unsafe.java:299) 在java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:810) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:844) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1173) at java.util.concurrent.locks.ReentrantLock $ FairSync.lock(ReentrantLock.java:196) at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:257) 在net.sqlcipher.database.SQLiteDatabase.lock(SQLiteDatabase.java:490) at net.sqlcipher.database.SQLiteProgram.close(SQLiteProgram.java:294) at net.sqlcipher.database.SQLiteQuery.close(SQLiteQuery.java:136) 在net.sqlcipher.database.SQLiteCursor.close(SQLiteCursor.java:510) 在android.database.CursorWrapper.close(CursorWrapper.java:50) 在android.database.CursorWrapper.close(CursorWrapper.java:50) 在android.content.ContentResolver $ CursorWrapperInner.close(ContentResolver.java:2512) 在android.database.CursorWrapper.close(CursorWrapper.java:50)
我尝试过YieldAllowed,但没有运气。 知道为什么主线程正在等待光标关闭以及这个问题的任何解决方案吗?
答案 0 :(得分:1)
at java.util.concurrent.locks.ReentrantLock$FairSync.lock(ReentrantLock.java:196)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:257) at
调试并检查哪个线程持有锁定以及为什么会出现死锁
当你进行数据库操作时:
无法锁定ReentrantLock
ReentrantLock因主线程
而被锁定构建一个Android应用程序,基本上你需要了解并发,同步,锁定
https://docs.oracle.com/javase/tutorial/essential/concurrency/ https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html https://docs.oracle.com/javase/tutorial/essential/concurrency/liveness.html
从那里开始挖掘: 的 net.sqlcipher.database.SQLiteDatabase.lock(SQLiteDatabase.java:490)强>
你在dalvik和艺术上都有这个问题吗?