|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 1541
|
[JAVA]Monitorare i thread lanciati da una servlet
Ciao a tutti ragazzi,
sto scrivendo una servlet che, ad ogni chiamata del metodo doGet, lancia un thread più o meno in questo modo: Codice:
String host = request.getParameter("host"); int depth = Integer.parseInt(request.getParameter("depth")); long lapse = Long.parseLong(request.getParameter("lapse")); new Thread(new Traverse(host, depth, lapse)).start(); Il mio problema ora è come stoppare i singoli thread che verranno lanciati e come monitorarli ovvero, io voglio sapere in ogni momento quanti e quali sono i thread running (lanciati dal doGet ovviamente) ed avere la possibilità di fermarli. Qualcuno ha qualche idea? Grazie in anticipo
__________________
[ punkeroso ] - [ powered by Arch Linux ] |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Ti basta tenerne riferimento in una struttura dati. Quanto all' interrompibilità, dipende da cosa c'è scritto nel metodo run, ovvero se hai previsto la verifica periodica di un flag di interruzione.
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 1541
|
Quote:
Nel metodo run avevo previsto un flag che settato su false interrompesse il while in modo da terminare il thread. Il mio problema è semplicemente come tener traccia di tutti i thread avviati. Magari se potessi farmi un esempio mi saresti di grande aiuto. Per quanto riguarda la struttura dati non ci sono problemi. Grazie Ciao
__________________
[ punkeroso ] - [ powered by Arch Linux ] |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Codice:
QualsiasiStrutturaDati listaThread= new QualsiasiStrutturaDati(); per ogni thread lanciato listaThread.add (new Thread(....)); |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Se hai in ballo questioni di scalabilità prova a dare un'occhiata al package java.util.concurrent
Vedendo ogni singola Traverse come un task da eseguire, puoi appoggiarti ad un Executor a cui passare ogni nuovo task creato per l'esecuzione. In pratica passeresti dallo scrivere: Codice:
(new Thread(t)).start(); // dove 't' è un Traverse "travestito" da Runnable. Codice:
e.execute(r); // dove 'e' è un Executor. Volendo c'è anche l'interfaccia ExecutorService (la specifica implementazione dell'ExecutorService che si sceglie definisce le politiche di creazione e gestione dei thread per l'esecuzione dei task) che, dato il task da mandare in esecuzione, restituisce l'oggetto Future che ne rappresenta il futuro risultato (cosa che ti permette di gestirne lo stato, ad esempio richiedere la cancellazione dell'esecuzione del task): Codice:
Future<?> t = es.submit(r); // dove 'es' è l'ExecutorService scelto, e 't' è il Future per il task 'r' passato in ingresso. Puoi cominciare a leggere qualcosa qui.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 22-03-2010 alle 10:13. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 1541
|
Quote:
Grazie Ciao
__________________
[ punkeroso ] - [ powered by Arch Linux ] |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
- Ovviamente il capitolo dedicato al multithreading presente nel compendio "The Really Big Index" dei Java Tutorial; - I javadoc (informazioni sparse sulle varie classi e interfacce) del package java.util.concurrent; (in particolare: Callable, Future, RunnableFuture, FutureTask, Executor, ExecutorService, ThreadFactory, ThreadPoolExecutor, Executors); - Questo tutorial [2004] della IBM (è neccessario registrarsi per accedere ai tutorial); - Questo tutorial, estratto dal testo "Java - How to program" edito dalla Deitel (che però non ho letto).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:28.