有类似的问题,但没有明确的答案从多个线程使用sqlite数据库。 请考虑以下情形:
class MainActivity extends Activity {
DbHelper db; //extends sqliteopenhelper
...
void M1() {
db.getReadableDatabase();
Cursor c = db.query("...."
...
db.close();
}
void M1() {
db.getReadableDatabase();
Cursor c = db.query("...."
...
db.close();
}
好吧,这不是多线程,但问题是,
使用与上面相同的sqliteopenhelper实例(即db)实例,在不同方法中多次打开和关闭会成为一个问题吗?
我的情况如下:
myAsync extends AsyncTask
doInBackground(.. {
do something using M1(); //this is a background thread
}}
onResume()...{
myAsync.execute();
M2(); //this is the main thread
...
}
如果您在异步方案中看到,可能两个方法可以同时访问同一个数据库(仅供阅读 - 如何写?)。但是他们使用的是SqliteOpenHelper的相同实例。它会导致碰撞,如果是这样,如何避免这种情况?
我想了解更多有关sqlite数据库和并发的信息 任何想法都会非常感激。
答案 0 :(得分:0)
你有可能没有碰撞但你的数据库可能会在获得另一个线程时关闭,当我们使用synchronized关键字时你可以选择线程的“同步”概念即优先级等,然后一个线程完成任务然后其他线程将启动