我一直使用Singleton
模式创建应用SQLite
的应用,但现在我想知道是否最好使用这样的锁:
class DatabaseHelper {
Object lock
SQLiteDatabase db;
// more properties....
public void insert(BusinessEntity entity) {
synchronized(lock) {
db.insert(BusinessEntity.TABLE_NAME, // more params...
}
}
}
到目前为止,我一直使用单例,我从不担心查询没有执行多个连接到同一个DB的原因,但据我所知,锁定也可以解决这个问题。
这里有什么更好的方法,为什么?而且,synchronized
例子还可以吗?我之前从未使用过synchronized
所以我不确定它是否可以。
答案 0 :(得分:0)
Singleton和Lock是两个不同的概念,并不相互关联。锁定在对象级别上获取,但不在类级别上获取。对象是单例对象还是普通对象并不重要。
<强>的Singleton 强>
在软件工程中,单例模式是一种设计模式,它将类的实例化限制为一个对象。当需要一个对象来协调整个系统的操作时,这非常有用。请注意,单例模式不会对对象应用锁定。例如,2个不同的线程共享相同的单个对象引用,并且可以同时调用该单个对象上的不同方法。
锁定
锁意味着,我们限制同时通过2个不同的线程访问相同的资源(对象)。 Java使用synchronized块或synchronized方法实现了锁概念。
注意:在您的代码示例中,您正在获取“ lock ”对象的锁定(即同步(锁定)) 但不是“ db ”对象。要获取db对象的锁定,您必须将代码更改为
synchronized(db){
......
}