J'utilise singleton pour enregistrer tous les événements se produisant simoultanously dans le système.Singleton avec Lock - blocage possible? en 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();
}
}
Toutes les heures je veux verrouiller l'événement d'enregistrement pour envoyer la base de données sur Internet.
file = Singleton.getInstance().lockAndGetDB();
try {
sendViaHTTP(file);
}
finally {
Singleton.getInstance().unlock();
}
Y a-t-il des blocages possibles? Est-ce que le fil est sûr?
EDITED. (essayez/enfin ajouté pour l'envoi viaHTTP) Mais ce n'est pas le problème principal. La question est, s'il y a des threads qui attendent sur dbLock.lock(); à recordEvent (Event ev) sont mon Singleton.getInstance(). unlock(); sera en mesure d'entrer le code getInstance() et de déverrouiller?
L'implémentation d'un tel verrou va avoir un impact énorme sur les performances de cette application ... y a-t-il une raison pour laquelle vous ne voulez pas utiliser JDBC? –
@JordanDenison Je l'implémente dans Android. Mais il est question générale de java –