获取DB上的EXCLUSIVE锁

时间:2014-01-22 07:48:34

标签: java android

Background

我每天在特定时间更新数据库服务,而此数据库正在更新,用户尝试打开我想要保留的应用程序并且不显示正在发生的事情,尽管我的服务是典型的Cron工作在后台实施。可以做些什么来实现这一目标?此外,我想获取数据库上的锁,以便记录不会搞砸。非常感谢任何关于这方面的任何关键或任何相关的算法。

1 个答案:

答案 0 :(得分:1)

以下是使用ReentrantReadWriteLock锁定数据库的方法。

// Create the lock object
private ReentrantReadWriteLock lockSqliteDB = new ReentrantReadWriteLock();

// Called to update the database
public void updateDatabase() {
    try {
        lockSqliteDB.writeLock().lock();

        // Read and update the database here

    } finally {
        sqliteDB.close();
        lockSqliteDB.writeLock().unlock();
    }
}

// Called to read from the database
public void readDatabase() {
    try {
        lockSqliteDB.readLock().lock();

        // Read from the database here

    } finally {
        sqliteDB.close();
        lockSqliteDB.readLock().unlock();
    }
}

请注意,多个线程将能够使用读锁定同时从数据库中读取。但是,单个线程可以使用写锁定写入数据库,在此期间没有其他线程可以读取或写入。