1

这个问题似乎与我读过的许多问题非常相似,但话又说回来,我没有找到任何能让我满意的代码。(或者我太困了,没有意识到这一点)

我有一个单例数据库助手来确保其中只有一个存在。问题不在这里。在尝试确保仅存在一个数据库连接同时仍在使用getReadableDatabasegetWritableDatabse方法时遇到问题。

我知道它在大多数情况下返回相同的引用,我可以处理它的使用,但我不知道如果我打开了只读连接(可能内存不足)并且另一个线程想要打开一个可写连接。我想阻止写入线程,直到只读连接关闭,然后尝试打开可写连接。

你是怎样做的?这可能只能在 Java 中通过一些线程锁定来完成,但不确定应该使用哪些方法。

PS如果我遗漏了什么 - 请随时告诉我应该如何以另一种方式完成。

4

1 回答 1

1

我过去也遇到过同样的问题,同步就是答案。简单地说,就是在databasehelper实例上同步。或者你可以做的是为getWritableDatabase创建一个包装器方法,并在方法声明中使用synchronized关键字。然后永远不要调用 getReadableDatabase ,而只是调用包装器方法。由于 getReadableDB 和 getWritableDB 提供相同的参考,因此这样做是安全的。有道理?

于 2012-09-17T05:28:19.070 回答