Programme multi-htreads

zomaz Messages postés 1 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 16 septembre 2004 - 16 sept. 2004 à 11:13
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 - 18 sept. 2004 à 09:21
Bonjour à tous,

J'ai un petit souci avec l'ulitisation de threads multiples :

je dois réaliser un programme qui simule un envoi de requetes sur un serveur. Il existe plusieurs types de requetes, chacune d'entre elles devant etre envoyées à une certaine fréquence.
Voici comment j'ai construit mon programme :

public class Injecteur
{
public static void main (String [] args)
{
...
try
{
// lancement des threads
for (int i = 0; i < nb_services; i++)
{
ts[i] = new tService (session, ...)
ts[i].start();
}
Thread.currentThread().yield();
}
catch (SessionException e)
{
System.err.println(e);
}

}
}

class tService extends Thread
{
....
public tService (...)
{
... //recuperation des variables
}

public void run ()
{
tRequete[] tr = new tRequete[nb_requetes];
try
{
while (i<nb_requetes)
{

tr[i] = new tRequete (...);
tr[i].start();
Thread.currentThread().sleep(my_sleep);
i++;
}
}
catch (Exception e)
{
System.err.println(e);
}
}
}

class tRequete extends Thread
{

public tRequete (...)
{
//recuperation des variables
}

public void run()
{

try
{
//envoi de la requete
}
catch (Exception e)
{
e.printStackTrace();
System.err.println(e);
}
}
}

En gros je crée autant d'objets tService que de services à injecter, et un objet tRequete représente une requete pour un service. La frequence d'envoi des requetes est représentée par la variable my_sleep (j'ai pas détaillé le calcul de cette valeur)

Le programme fonctionne correctement pendant une dizaine de minutes avant de partir en erreur (java.lang.outofmemory). Si je regarde la charge CPU sur mon PC, elle à fond lorsqu'on a le message d'erreur. Je pense que je ne dois pas correctement libérer les threads une fois terminées.

Ou peut-etre que l'architecture de mon appli n'est la bonne pour ce type d'application.

Merci pour votre aide !

1 réponse

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
18 sept. 2004 à 09:21
Salut,

ton prog consomme toute la mémoire disponible pour Java. C'est pas si grave il suffit d'augmenter la taille maximale avec l'option -Xmx. Par exemple java -Xmx300M -jar mon.jar indique une taille maximale de 300 Mo.
Après il faut faire atentin aux nombres de services et de requêtes par services que tu crées. Si tu as 100 services et 500 requêtes ça peut faire beaucoup.
0
Rejoignez-nous