我使用单例记录在系统中同时发生的所有事件。带锁的单身人士 - 可能的死锁?在java
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();
}
}
每隔几个小时,我想锁定录制事件以通过互联网发送数据库。
file = Singleton.getInstance().lockAndGetDB();
try {
sendViaHTTP(file);
}
finally {
Singleton.getInstance().unlock();
}
有没有可能的死锁?线程安全吗?
EDITED。 (尝试/最后添加通过HTTP发送)但这不是主要问题。问题是,如果有线程在等待dbLock.lock();在recordEvent(Event ev)是我的Singleton.getInstance()。unlock();将能够输入getInstance()代码并解锁?
像这样实现一个锁定会对这个应用程序的性能产生巨大的影响......是否有任何理由不想使用JDBC? –
@JordanDenison我正在Android中实现它。但它是关于java的一般问题 –