我每天在特定时间更新数据库服务,而此数据库正在更新,用户尝试打开我想要保留的应用程序并且不显示正在发生的事情,尽管我的服务是典型的Cron工作在后台实施。可以做些什么来实现这一目标?此外,我想获取数据库上的锁,以便记录不会搞砸。非常感谢任何关于这方面的任何关键或任何相关的算法。
答案 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();
}
}
请注意,多个线程将能够使用读锁定同时从数据库中读取。但是,单个线程可以使用写锁定写入数据库,在此期间没有其他线程可以读取或写入。