sqlite доступ из нескольких потоков для чтения - PullRequest
0 голосов
/ 06 августа 2011

есть похожие вопросы, но неясный ответ вокруг использования 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(.. {<br>
       do something using M1();  //this is a background thread
    }}         
    
    onResume()...{
        myAsync.execute();
        M2();      //this is the main thread
       ...
      }
    
  2. если вы видите, что в асинхронном сценарии, вероятно, два метода могут одновременно обращаться к одной и той же базе данных (только для чтения - как насчет записи?). Но они используют один и тот же экземпляр SqliteOpenHelper. Может ли это привести к столкновению, и если да, то как этого избежать?

  3. Я хотел бы узнать больше о базе данных sqlite и параллелизме
    Любые идеи будут с благодарностью.

1 Ответ

0 голосов
/ 06 августа 2011

да, есть вероятность не столкновения, но ваша БД может закрыться, когда другой поток будет получен, вы можете использовать концепцию «Синхронизированного» потока, то есть приоритета и т. Д., Когда мы используем синхронизированное ключевое слово, тогда один поток завершает свою задачу, а затем другой.поток начнется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...