【问题标题】:sqlite access from multiple threads for reading从多个线程访问sqlite以进行读取
【发布时间】:2011-08-06 05:42:21
【问题描述】:

关于从多个线程使用 sqlite db 有类似的问题,但没有明确的答案。 考虑以下场景:

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 数据库和并发的信息
    任何想法都将不胜感激。

【问题讨论】:

    标签: android multithreading sqlite


    【解决方案1】:

    是的,有可能不会发生冲突,但是当获取另一个线程时,您的数据库可能会关闭,当我们使用同步关键字时,您可以选择线程的“同步”概念,即优先级等,然后一个线程完成它的任务然后另一个线程将开始

    【讨论】:

    • 谢谢你提到“同步”,有人说如果我只读,没有限制也没有冲突。真的吗?而且我也想了解同步,但那里没有什么用处。你能推荐我任何链接,博客,来源吗?我已经搜索过android dev。
    • 当然,如果我得到任何详细信息,肯定会
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多