Avrei la necessità di scrivere una classe astratta e contenga un metodo astratto da ridefinire (ad esempio lavoro()) e che disponga di un altro metodo che invocato effettui l'esecuzione (ad esempio lancia()) di lavoro() ma non prima che siano passati tot secondi (parametro del costruttore) dall'ultima chiamata. Qualora siano passati meno secondi di quanto stabilito dovrebbe sospendere l'esecuzione ed eseguirla al termine del tempo; tutte altre eventuali chiamate al metodo eseugui() quando ce n'è uno in esecuzione verrebbero ignorate.

Dovrebbe funzionare essere cosi:

abstract class EseguiTempo extends .... {

public EseguiTempo(int secondiTimeout){...}
abstract publi void lavoro() {}
public void lancia() {...}

}
...
EseguiTempo mio = new EseguiTempo(10) {
public void lavoro() {
// Mio codice
}
};
...
mio.lancia(); // Prima volta esegue sicuramente
Thread.sleep(5000);
mio.lancia(); // Sono passati solo 5 sec., metto in attesa
mio.lancia(); // C'è già una chiamata in attesa, ignoro
...
Ho provato in tutte le salse a costruire EseguiTempo estendendo Thread e utilizzando wait() e notify() ma trovo sempre qualche inghippo, c'è qualcuno che mi sa aiutare?
Grazie
Matteo