Multitâche et sychronisation

Résolu
cs_hamzabba Messages postés 7 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 12 juin 2009 - 10 avril 2008 à 09:34
cs_hamzabba Messages postés 7 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 12 juin 2009 - 10 avril 2008 à 20:03
Bonjour,

voici un petit programme java que j'ai tester pour voir le déroulement de synchronisation a l'aide des moniteurs : (pour que le message de methode 1 soit toujours affiché le premier )

class UneClasse extends Thread {

private final Lock lock = new ReentrantLock();

private final Condition cond1 = lock.newCondition();

private final Condition cond2 = lock.newCondition();

public int type;

void methode1() throws InterruptedException {

lock.lock();

try {

System.out.println("methode 1 envoi le signale");

cond1.signal();

} finally {

lock.unlock();

}

System.out.println("Fin de methode 1");

}

void methode2() throws InterruptedException {

lock.lock();

try {

System.out.println("methode 2 attend le signale");

cond1.await();

} finally {

lock.unlock();

}

System.out.println("Fin de methode 2");

}

public static void main(String[] args) {

UneClasse t1=new UneClasse();

UneClasse t2=new UneClasse();

t2.type=2;

t2.start();

System.out.println("T2 démarrer ... ");

t1.type=1;

t1.start();

System.out.println("T1 démarrer ... ");

}

@Override public void run() {

try {

switch (type) {

case 1: methode1();

case 2: methode2();

}

} catch (InterruptedException ex) {

Logger.getLogger(UneClasse.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

Le résultat d'exécution de ce programme est:

T2 démarrer ...

T1 démarrer ...

methode 2 attend le signale

methode 1 envoi le signale

Fin de methode 1

methode 2 attend le signale

d'après le résultat d'exécution on constate que la methode 2 ete bloquer sur await .

Donc la question que je n'arrive pas a répondre est :

pourquoi la methode 2 ete bloque encore au 2 fois sur wait() aprés que la methode 1 a envoi le signale !?

- j'attends beaucoup vous réactions.

merci d'avance

1 réponse

cs_hamzabba Messages postés 7 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 12 juin 2009
10 avril 2008 à 20:03
salut

je pense que j ai trouver le probleme qui sert un erreur dans le bloc switch , en effet a cause  que j ai pas met les break entraine a lancement de 3 methode  dansl ordre suivant : 1,2,2

un notre problem également réside dans la déclaration de moniteur lock a cause que j est pas met le mot static ça entrain a la creation des moniteur a chaque objet
(et noun voulons partager 1 seul moniteur).

j espère que cela vous  interesse

Merci
3
Rejoignez-nous