Ho un'applicazione che ogni 15 minuti circa esegue una replica da un database remoto. Mantiene solo i due repository sincronizzati. Una volta che questa replica sta andando, non è possibile farlo di nuovo. Ho configurato la seguente struttura, ma non sono sicuro che sia l'approccio corretto.Come bloccare un metodo java per proteggere più chiamate
public class ReplicatorRunner {
private static Lock lock = new ReentrantLock();
public replicate() {
if (lock.tryLock()) {
try {
// long running process
} catch (Exception e) {
} finally {
lock.unlock();
}
} else {
throw new IllegalStateException("already replicating");
}
}
}
public class ReplicatorRunnerInvocator {
public void someMethod() {
try {
ReplicatorRunner replicator = new ReplicatorRunner();
replicator.replicate();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
Il ReplicatorRunner
è la classe che possiede il metodo replicate
che può essere eseguito solo uno alla volta.
Modifica. Ho bisogno della prossima chiamata per fallire (non bloccare) se il metodo è già in esecuzione su qualsiasi istanza.
C'è una domanda qui da qualche parte? – shoosh
Yeap, nel titolo ... amico, non ho il tempo di aiutarti completamente ma controlla la parola chiave sincronizzata ... –
La sincronizzazione è su una istanza o su una classe (se è statica) e blocchi. Voglio che fallisca e non blocchi. – rmarimon