[JAVA] aide sr les Thread
kittyhime
Messages postés
10
Statut
Membre
-
chuka Messages postés 980 Statut Membre -
chuka Messages postés 980 Statut Membre -
Bonjour,
Je dois développer une application producteur/consommateur pour illustrer le mécanisme de synchronisation entre threads.
Un thread producteur crée des messages et les place dans une file d'attente.
Un thread consommateur retire un message de la file et l'affiche.
Le producteur et le consommateur ont un débit différents.
Voici mon code (je ne vous copie/colle pas les assesseurs) :
Classe Producteur
Classe Consommateur
Classe Main
Resultat à l'écran :
Production du message 1
Consommation du message 1
Production du message 2
Production du message 3
Production du message 4
Production du message 5
Je suppose que mon pb vient du fait que je boucle sur this.p.getMessage() dans la classe Consommateur et qu'a ce moment du programme, il n'y a que le premier message de produit.
J'ai commencé il y a 1h a comprendre comment marchent les Thread alors svp expliquez moi simplement :)
J'attends votre aide! Merci!
KITTY
Je dois développer une application producteur/consommateur pour illustrer le mécanisme de synchronisation entre threads.
Un thread producteur crée des messages et les place dans une file d'attente.
Un thread consommateur retire un message de la file et l'affiche.
Le producteur et le consommateur ont un débit différents.
Voici mon code (je ne vous copie/colle pas les assesseurs) :
Classe Producteur
public class Producteur extends Thread{
private int messagePro; //nbre de message à produire
private int message; //nbre de message produit
private int debit; //debit de production
public Producteur(int m, int d) {
setMessagePro(m);
setDebit(d);
}
public void run() {
for (int i = 1; i <= this.getMessagePro(); i++) {
setMessage(this.getMessage()+1);
System.out.println("Production du message " + i);
try { sleep(this.debit); }
catch (InterruptedException e) { }
}
}
}
Classe Consommateur
public class Consommateur extends Thread{
private Producteur p;
private int debit;
public Consommateur(Producteur p, int d) {
this.p = p;
setDebit(d);
}
public void run() {
for (int i = 1; i <= this.p.getMessage(); i++) {
System.out.println("Consommation du message " + i);
try { sleep(this.debit); }
catch (InterruptedException e) { }
}
}
Classe Main
public class Main {
public static void main(String[] args) {
Producteur p = new Producteur(5, 1000);
p.start();
Consommateur c = new Consommateur(p, 1000);
c.start();
}
}
Resultat à l'écran :
Production du message 1
Consommation du message 1
Production du message 2
Production du message 3
Production du message 4
Production du message 5
Je suppose que mon pb vient du fait que je boucle sur this.p.getMessage() dans la classe Consommateur et qu'a ce moment du programme, il n'y a que le premier message de produit.
J'ai commencé il y a 1h a comprendre comment marchent les Thread alors svp expliquez moi simplement :)
J'attends votre aide! Merci!
KITTY
A voir également:
- [JAVA] aide sr les Thread
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
1 réponse
Salut,
c'est peut-etre un peu tard, mais tu peux essayer cela:
Bon courage!!
@+
c'est peut-etre un peu tard, mais tu peux essayer cela:
package chartostring;
import java.lang.*;
import java.lang.Object.*;
import java.util.*;
import java.util.ArrayList;
class Producteur extends Thread{
private int messagePro; //nbre de message à produire
private int message; //nbre de message produit
private int debit; //debit de production
private ArrayList ar;
public static final Object obj=new Object();
public Producteur(int m, int d,ArrayList ar) {
messagePro=m;
debit =d;
this.ar=ar;
}
public void run() {
for (int i=0;i<messagePro;i++) {
System.out.println("Production du message " + i);
synchronized (obj)
{
ar.add("Production du message " + i);
}
try { sleep(this.debit*1000); }
catch (InterruptedException e) { }
}
}
}
class Consommateur extends Thread{
private Producteur p;
private int debit;
private ArrayList ar;
public Consommateur(Producteur p, int d,ArrayList ar) {
this.p = p;
debit=d;
this.ar=ar;
}
public void run() {
String j="";
while(p.isAlive() || !ar.isEmpty()) {
synchronized (Producteur.obj)
{
if (!ar.isEmpty())
{
j="Consommateur "+(String)ar.get(ar.size()-1);
ar.remove(ar.size()-1);
System.out.println(j);
}
}
try { sleep(this.debit*1000); }
catch (InterruptedException e) { }
}
}
}
/**
* @param args the command line arguments
*/
public class Main {
public static void main(String[] args) throws InterruptedException {
ArrayList ar=new ArrayList(10);
Producteur p=new Producteur(20,1,ar);
Consommateur cons= new Consommateur(p,2, ar) ;
p.start();
cons.start();
p.join();
cons.join();
}
}
Bon courage!!
@+