2009-12-25 10 views
6

Per molte ragioni, non è consigliabile utilizzare i thread all'interno di un servlet.È sicuro usare java.util.Timer all'interno di un servlet?

java.util.Timer sembra avvolgere un filo. Quindi, non è sicuro anche usarlo? In tal caso, qual è il modo più sicuro per pianificare un'attività in un servlet?

+1

Per le migliori risposte, si prega di elaborare per che cosa esattamente ne hai bisogno. – BalusC

+0

Non penso davvero che importi, vero? –

+1

Si può sicuramente usarlo in sicurezza, ma il modo più sicuro (il migliore) dipende dal reale requisito funzionale. Quelli che fanno questa particolare domanda spesso non sono pienamente consapevoli del ciclo di vita del servlet, che potrebbe portare a problemi quando si gioca con i thread. Questa è la causa principale del problema che è "non una buona pratica" (che in realtà non è vero :)). – BalusC

risposta

9

Sì, è possibile utilizzare i timer.

Un importante cosa da ricordare è quello di annullare che Timer quando il servlet viene arrestato. Se dimentichi di annullare il Timer, la tua webapp subirà perdite di memoria (leak del classloader, poiché il Thread del Timer è associato a WebappClassLoader tramite il suo ContextClassLoader) e non può essere distribuito più volte.

+0

c'è un altro involucro sicuro? – mebada

+0

grazie per il tuo sforzo – mebada

+0

definire "sicuro" per favore. Intendi "accesso sicuro" o "privo di bug" o "facile da usare" o ...? – mhaller

2

Sì. È perfettamente sicuro Il contenitore servlet si occupa dei thread per le richieste HTTP, ma è possibile generare autonomamente i thread aggiuntivi, indipendentemente dal fatto che la loro durata sia limitata a quella della richiesta o più a lungo.

ad es. un modello comune è generare un thread di elaborazione a esecuzione prolungata. Le richieste servlet metterebbero gli elementi di lavoro su una coda (per l'elaborazione out-of-band) e il thread di elaborazione a lunga esecuzione gestirà questi elementi di lavoro.

Here's an article from OReilly dettagli sull'utilizzo del timer in servlet e EJB.

+0

anche io lo uso nei metodi doPost oe doGet? – mebada

+0

Sì. Va bene –

+0

c'è un riferimento o un punto di riferimento per testarlo? – mebada