Newsgroup: it.comp.java
Titolo: Thread Pool

Salve, potreste dirmi come creare un semplice ThreadPool.
Ho visto nella documentazione sun il newFixedThreadPool, ma
sinceramente non riesco a capire come usarlo, nel senso come faccio a
creare i thread e passargli ogni volta i parametri.
Grazie


per cosa hai bisogno i thread?
i thread (da soli, senza pool) li sai usare?
ora, io il ThreadPool non lo trovo nella doc, trovo solo il
ThreadPoolExecutor, e c'e' un esempio di codice su come usarlo.
L'unico consiglio che posso darti e' fare un programma molto semplice
che ti permetta di giocare con questo ThreadPool, in modo da capire
come funziona,
Ciao Jack

 i thread (da soli, senza pool) li sai usare?
si

> per cosa hai bisogno i thread?
E> devo creare un programma pero' devo utilizzare un threadPool per
E> soddisfare tutte le richieste che vengono effettuate al server.
E> Con i thread non saprei come fare a creare una coda per non perdere
E> le richieste quando tutti i thread sono occupati.
La coda  la deve  gestire un thread  diverso.  Avevo fatto  una cosina
simile in C via DCOM (dddddolore di stomaco!), un thread a ricevere le
richieste e metterle  in una coda e n thread  che andavano a prelevare
di  volta in  volta un  thread dalla  coda, con  un po'  di  mutex per
sincronizzare i thread sulla risorssa condivisa (la coda).
Il ThreadPoolExecutor ti da tutto pronto, lo crei, inizializzi e poi gli
passi dei Runnable. Semplice.
E i parametri ? Nel Runnable of course ;)
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software
P.S. 
Qiuzzotto Stupidotto:
Perché il commento "più thread ? Ma non c'è pericolo di deadlock" nel caso
del mio programma in C non si poneva (non si poneva indipendentemente dal
programmatore) ? 

 E i parametri ? Nel Runnable of course ;)
Scusa la mia ignoranza.. ma in pratica come lo dovrei fare..
perchè sulle api ho trovato
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue)
però non ho capito cosa sia il corePoolSize e l' ultimo parametro...
grazie

 writes:
E> Scusa la mia ignoranza.. ma in pratica come lo dovrei fare..
E> perchč sulle api ho trovato
E> public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
E> long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable>
E> workQueue)
E> perň non ho capito cosa sia il corePoolSize e l' ultimo
E> parametro...
I  primi due  parametri indicano  la dimensione  ideale e  massima del
pool.  Come sono usate č spiegato in
http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ThreadPoolExecutor.html
quando descrive la classe in generale.
L'ultimo parametro  č la coda dove  vengono messi in attesa  i task da
eseguire. La  documentazione indica l'uso di  tre implementazioni, una
che in  pratica non  accoda mai  (o manda in  esecuzione con  un nuovo
thread  o rifiuta),  una che  non  rifiuta mai  (se ghe  voe tempo,  i
speta!),  ha il problema  che se  il server  č piů  lento di  quanto i
client siano  esigenti, la  coda scoppia. Un  terzo metodo  consede un
accodamento  limitato  (fino  ad  un certo  punto  accoda,  altrimenti
rifiuta).
Io queste cose le ho appena lette nella documentazione...


 Io queste cose le ho appena lette nella documentazione...
a parte l'ultimo parametro (che anche se non si capiva bene come usarlo
si capisce cosa serve), gli altri sono abbastanza self-explanatory...
-- 
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?