Background
我每天在某个特定时间从服务中更新数据库,而该数据库正在更新中,并且用户尝试打开我要保留的应用程序,并且不显示正在发生的事情,尽管我的服务是实施的典型Cron作业在后台。要做到这一点怎么办?我也想在数据库上获得一个锁,这样记录就不会弄乱了。在这方面,我们将不胜感激。
最佳答案
这是使用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();
}
}
请注意,多个线程将能够与读取锁同时从数据库读取。但是,可以使用写锁将单个线程写入数据库,在此期间其他线程将无法读取或写入。