0

同じプロセス内に 2 つの異なるスレッドが同時に持続しようとしている場合の並行性の問題について、greendao をテストしています。

同じプロセスで 2 つのスレッドを生成し、ランダムに入力された 100 個の dao を同時に挿入します。

GreenDao バージョン 1.3.0

何か間違ったことをしている場合や、さらに情報が必要な場合はお知らせください。ありがとうございます!


このエラーが発生し続けます:

04-04 14:29:48.528: E/Database(17736): Failure 5 (database is locked) on 0x2d4c98 when executing 'BEGIN EXCLUSIVE;'
04-04 14:29:48.528: W/dalvikvm(17736): threadid=10: thread exiting with uncaught exception (group=0x40018560)
04-04 14:29:48.538: E/AndroidRuntime(17736): FATAL EXCEPTION: Thread-11
04-04 14:29:48.538: E/AndroidRuntime(17736): android.database.sqlite.SQLiteException: database is locked: BEGIN EXCLUSIVE;
04-04 14:29:48.538: E/AndroidRuntime(17736):    at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
04-04 14:29:48.538: E/AndroidRuntime(17736):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1772)
04-04 14:29:48.538: E/AndroidRuntime(17736):    at android.database.sqlite.SQLiteDatabase.beginTransactionWithListener(SQLiteDatabase.java:536)
04-04 14:29:48.538: E/AndroidRuntime(17736):    at android.database.sqlite.SQLiteDatabase.beginTransaction(SQLiteDatabase.java:490)
04-04 14:29:48.538: E/AndroidRuntime(17736):    at de.greenrobot.dao.AbstractDao.executeInsert(AbstractDao.java:344)
04-04 14:29:48.538: E/AndroidRuntime(17736):    at de.greenrobot.dao.AbstractDao.insert(AbstractDao.java:293)

dao を挿入するために使用される私のコードは次のとおりです。

getGreenDaoSession().getMyDao().insert(this.myDao);
4

1 に答える 1

1

最後にこれを理解しました。

各スレッドは、個別の を生成していましたDaoSession。各スレッドは同じプロセスにあるため、同じプロセスを使用する必要がありますDaoSession

これは気になりますが、同じテストを実行しようとしているが、スレッドが異なるプロセスにある場合、これがどのように機能するのか疑問に思っています。

于 2013-04-05T17:26:30.843 に答える