stoppare e riprendere esecuzione di codice
[ Nouvelle discussion
| Répondre au groupe
|
it.comp.java ]
ciao ragazzi, ho il seguente problema, abbastanza complicato. ho
numerose istanze relative a due classi di oggetti che interagiscono
tra di loro, Oggetto1 e Oggetto2 con i rispettivi metodi metodo1() e
metodo2(). consideriamo il caso in cui abbia diverse istanze di
Oggetto1 ed una sola istanza di Oggetto2(). ciò che mi servirebbe
realizzare è un comportamento di questo tipo:
public void metodo1() // relativo all'Oggetto1
{
//fai qualcosa
//blocca l'esecuzione del codice di questo metodo relativo
all'Oggetto1 corrente e salva il suo stato (cioè il punto fin dove ho
eseguito il codice) in una lista comune a tutti (statica)
// fai altre cose
//sblocca l'Oggetto2 che sicuramente si è messo nella lista dopo
avermi sbloccato
// riesegui metodo1() tra un certo numero di secondi
}
public void metodo2() // relativo all'Oggetto2
{
//fai qualcos'altro
//controlla nella lista statica degli oggetti se c'è qualche Oggetto1
in attesa, estrailo dalla lista (secondo un criterio assegnato e ben
preciso) e riprendi l'esecuzione del codice relativo (cioè sbloccalo)
// blocca l'esecuzione del codice di questo metodo relavito
all'Oggetto2 e salva salva il suo stato nella lista
// fai altre cose ancora
// riesegui metodo2() tra un certo numero di secondi
}
due problemi in uno quindi: sospendere e riprendere l'esecuzione di
codice (soluzione: usare i thread?) e riplannare l'esecuzione del
codice dopo un tot numero di secondi (soluzione: usare le classi Timer
e TimerTask)
da tenere presente che, vista la dinamica del problema, i due oggetti
si "bloccano" a vicenda, pertanto i due metodi non verranno mai
eseguiti simultaneamente.
per la prima, ho provato senza successo con i wait() e notify(), che
però non sembrano adattarsi bene all'esigenza che ho di avere multiple
istanze di Oggetti1. tentando di evitare l'utilizzo dei deprecati
suspend() e resume() sui thread (che comunque presenta lo stesso
qualche problema) cosa potrei fare?
per la seconda, Timer mi sembra abbia una gestione poco efficiente dei
rescheduling di task a intervalli di tempo variabili, in quanto ogni
volta dovrei rischedulare un new TimerTask() (cosa fattibile nel caso
di Oggetto1 visto che ne ho già istanze multiple e potrei quindi farla
estendere direttamente da TimerTask, un po' più inefficiente nel caso
di Oggetto2 di cui devo tenere solo una istanza). ci sono classi built-
in alternative che fanno questo?
tengo conto della complessità del problema esposto e ringrazio
chiunque mi dia anche una piccola imbeccata ;)

|
 cette fonctionnalité est reservée aux membres ayant une session active !
|