从多个线程进行sqlite访问以进行读取

时间:2011-08-06 05:42:21

标签: android multithreading sqlite

有类似的问题,但没有明确的答案从多个线程使用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();
}
好吧,这不是多线程,但问题是,

  1. 使用与上面相同的sqliteopenhelper实例(即db)实例,在不同方法中多次打开和关闭会成为一个问题吗?
    我的情况如下:

    myAsync extends AsyncTask
    doInBackground(.. {
    do something using M1(); //this is a background thread }} onResume()...{ myAsync.execute(); M2(); //this is the main thread ... }
  2. 如果您在异步方案中看到,可能两个方法可以同时访问同一个数据库(仅供阅读 - 如何写?)。但是他们使用的是SqliteOpenHelper的相同实例。它会导致碰撞,如果是这样,如何避免这种情况?

  3. 我想了解更多有关sqlite数据库和并发的信息 任何想法都会非常感激。

1 个答案:

答案 0 :(得分:0)

你有可能没有碰撞但你的数据库可能会在获得另一个线程时关闭,当我们使用synchronized关键字时你可以选择线程的“同步”概念即优先级等,然后一个线程完成任务然后其他线程将启动