--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "jug-genova" di Google Gruppi.
Per postare messaggi in questo gruppo, invia un'email a jug-g...@googlegroups.com.
Per annullare l'iscrizione a questo gruppo, invia un'email a jug-genova+...@googlegroups.com.
Per ulteriori opzioni, visita il gruppo all'indirizzo http://groups.google.com/group/jug-genova?hl=it.
Mmmmhhhh... ci sono anche alternative, ma se per "maggior controllo" intendi il problema dei thread che muoiono, no, credo che la cosa richieda più indagine da parte tua. La Concurrency API è considerata piuttosto buona. Da quel che scrivi, sembrerebbe che ti mangi un'eccezione.
--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "jug-genova" di Google Gruppi.
Per postare messaggi in questo gruppo, invia un'email a jug-g...@googlegroups.com.
Per annullare l'iscrizione a questo gruppo, invia un'email a jug-genova+...@googlegroups.com.
Per ulteriori opzioni, visita il gruppo all'indirizzo http://groups.google.com/group/jug-genova?hl=it.
Non basta Thread.isAlive()?
Per quanto ne so è impossibile, come da specifiche della JVM (vedi commenti su Thread.stop() deprecato). La terminazione di un thread deve essere sempre collaborativa (alzare flag e il Thread deve periodicamente verificare il flag ed eventualmente fermare quello che sta facendo).
Ma hai anche provato la try / catch (Throwable)?
Comunque, aggiungo alla lista dei consigli Quartz. L'idea di Carlo di usare processi (Java) esterni non è male (credo ti faciliterebbe la gestione di uno stop con pulizia delle risorse, perché basterebbe killare il processo), dipende ovviamente da quello che si vuol fare.
--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "jug-genova" di Google Gruppi.
Per postare messaggi in questo gruppo, invia un'email a jug-g...@googlegroups.com.
Per annullare l'iscrizione a questo gruppo, invia un'email a jug-genova+unsubscribe@googlegroups.com.
Ma il Runnable che viene eseguito sì.
Attenzione che se non vedi il processo remoto, l'errore potrebbe stare là dentro e poi ti viene ribaltato sul chiamante.
Da quello che mi dici, io ho paura che il problema stia nella famigerata chiamata remota, che è un mostrillo. Non devono esistere chiamate remote così lunghe, ci vorrebbe una cosa asincrona in questi casi, ma se l'oggetto remoto non è modificabile, è un bel casino.
Concordo. Se non hai il controllo del codice remoto e del codice che effettua le chiamate remote, io seguirei il consiglio di Carlo sui processi fuori dalla JVM: per esperienza e' l'unico metodo che ti salva da ore e ore di debug e profiling.Se invece hai il controllo sul chiamante delle procedure remote non e' detto che l'approccio a tp non funzioni.
Di solito quando ho task lunghi e che lavorano principalmente su I/O uso i pool con oggetti di tipo SwingWorker(ad es. SeingWorker di jdesktop o anche Task di swing application framework).In questo modo ho sia un lifecycle (metodi doInBackground, done, ...) sia un po' di infrastruttura per mettere in piedi un controllo del progress via eventi. Inoltre in questi casi, visto che i metodi bloccanti del task lungo sono di solito attese efficenti, ho anche l'arma del thread interrupt (a patto di gestire correttamente l'uscita per InterruptedException).
--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "jug-genova" di Google Gruppi.
Per postare messaggi in questo gruppo, invia un'email a jug-g...@googlegroups.com.
Per annullare l'iscrizione a questo gruppo, invia un'email a jug-genova+...@googlegroups.com.
Per ulteriori opzioni, visita il gruppo all'indirizzo http://groups.google.com/group/jug-genova?hl=it.
magari sbaglio ma dagli interessi che stai indicando sembra che tu stia cercando funzionalita' tipiche di un sistema di process management
mi spiego meglio, ti preoccupi del fatto che ci siano thread che non fanno niente, quindi immagino che stiano aspettando che qualcuno faccia qualcosa, poi leggo che vuoi interrompere dei thread, quindi forse vuoi sospendere/eliminare il batch (o processo) in esecuzione.
insomma tutte queste cose le hai a disposizione e le gestisci facilmente disegnado un workflow del tuo batch e demandando l'esecuzione ad un apposito engine.
Un altra ipotesi è passare ad utilizzare una interazione a messaggi asincroni tipo jms ad inizio e fine attività.