シングルトンを使用して、システムで同時に発生するすべてのイベントを記録します。
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();
}
デッドロックの可能性はありますか? スレッドセーフですか?
編集済み。(HTTP経由で送信するために試してみてください/最終的に追加されました) しかし、これは主な問題ではありません. 問題は、dLock.lock(); を待機しているスレッドがあるかどうかです。recordEvent(Event ev) は私の Singleton.getInstance().unlock(); です。getInstance() コードを入力してロックを解除できますか?