Синхронизированный доступ к базе данных - PullRequest
0 голосов
/ 09 ноября 2011

Я использую базу данных в своем приложении, у меня есть требование для доступа к базе данных синхронно, например, когда мое приложение запускается, два потока обращаются к базе данных, как я могу избежать этой ситуации?

private synchronized Database accessDB()
{
    Database dbObj = null;
    try {
_uri = URI.create(dbLocation + DB_NAME);
try {
dbObj = DatabaseFactory.openOrCreate(_uri, new DatabaseSecurityOptions(false)); 
System.out.println("Database Created"+_dbTopNews);
    } catch (ControlledAccessException e) {
            // TODO Auto-generated catch block
e.printStackTrace();
} catch (DatabaseIOException e) {
// TODO Auto-generated catch block
    e.printStackTrace();
    } catch (DatabasePathException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
    } catch (MalformedURIException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return dbObj;
}

te вышеметод при отладке возвращает объект первому потоку, но возвращает ноль при обращении ко второму потоку

AY

1 Ответ

3 голосов
/ 09 ноября 2011

Как правило, есть два способа сделать это, в зависимости от того, за какой изоляцией вы находитесь.

1: Транзакции. Это изолирует операции в базе данных. Например, гарантия того, что только один поток (сеанс) может вносить изменения в таблицу или строку.

2: Синхронизация. Это метод в Java, с помощью которого параллелизм потоков обрабатывается в многопоточной среде. Используя синхронизацию (и «блокировку»), разделы вашего кода могут быть изолированы, так что только один поток может одновременно выполнять его.

Трудно быть более конкретным с предоставленной вами информацией.

...