我使用单例记录系统中同时发生的所有事件。
public class Singleton {
private static Lock dbLock;
protected Singleton() {}
private static class SingletonHolder {
private final static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
public void recordEvent(Event ev) {
dbLock.lock();
try {
database.insert(ev);
} finally {
dbLock.unlock();
}
}
public File lockAndGetDB() {
dbLock.lock();
return database.getFile();
}
public void unlockDB() {
dbLock.unlock();
}
}
每隔几个小时,我想锁定记录事件以通过 Internet 发送数据库。
file = Singleton.getInstance().lockAndGetDB();
try {
sendViaHTTP(file);
}
finally {
Singleton.getInstance().unlock();
}
有没有可能的死锁?它是线程安全的吗?
已编辑。(尝试/最终添加用于通过HTTP 发送)但这不是主要问题。问题是,是否有线程在等待 dbLock.lock(); 在 recordEvent(Event ev) 是我的 Singleton.getInstance().unlock(); 将能够输入 getInstance() 代码并解锁?