Les threads

sahahiba Messages postés 16 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 avril 2009 - 14 oct. 2006 à 10:31
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 14 oct. 2006 à 15:54
bonjour,
j'ai une question, j'ai voulu tester sur une instance du thread avant de l'instanciée. est ce qu'il possible?
est ce que je peut faire   "thr.isAlive()"   avec the est une instance du thread .
merci.

8 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
14 oct. 2006 à 10:50
je comprend pas trop la question mais pour voir si une instance est lancé ta plusieur maniere de le faire en voila une

public class tonThread{
   private static tonThread inst = null;
   //autre champs ....

   public tonThread(...){   if(inst null)inst this;
   else
          System.out.println("une instance existe deja");
   }
   public void run(){
   ...
   }
}

   sauf erreur ca devrais marcher

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
14 oct. 2006 à 14:29
Salut :

Déja s'il y a une variable n'est pas instancié, le compilateur signalera une erreur.

Toute initialisation en java passe soit :
1. par l'opérateur new
2. par une méthode d'initialisation.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
14 oct. 2006 à 14:34
Salut :

J'ai oublié un autre point :

3. Si votre variable est un attribut elle sera initalisé implicitement à une valeur par défaut.
dans le cas d'un objet toute tentative de manipulation de cet objet sans initialisation déclenche l'exception NullPointerException.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 oct. 2006 à 14:50
Saluts,

je ne suis pas super d'accord avec toi [auteurdetail.aspx?ID=237842 Ombitious_Developper]vu qu'en java tu peux tres bien faire Object o = null; donc
tu peux ajouter un petit 3

ensuite l'initialisation d'une variable dépend de la porté de la variable exemple:
prenons le code suivant
public class Test{
    public void plop(){
        Object o;
        Object o2 = o;
    }

    public static void main(String [] args){
        new Test().plop();
    }
}
si on compile on aura cette erreur  :
Test.java:4: variable o might not have been initialized
        Object o2 = o;
                            ^
1 error

par contre si on fait avec le code suivant :
public class Test{
    Object o;
    public void plop(){
        Object o2 = o;
    }

    public static void main(String [] args){
        new Test().plop();
    }
}
la on tout ce passe bien pas d'erreur

conclusion l'initialisation dépend de la portée d'une variable

voilou je ne répond pas à la question d'orrigine mais je voulais juste apporter une petite explication sur les dires ci-dessus....

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sahahiba Messages postés 16 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 avril 2009
14 oct. 2006 à 14:52
salut,
oui c'est ça le pb, mai ce que j'ai fait et ce que j'ai besion, est de tester sur ce variable non instancié,il est déclaré seulement.
et au moment de l'execution l'exception "NullPointerException" est enlevée.
donc j'ai besion de le tester avant de l'instancié.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
14 oct. 2006 à 14:59
Salut :

Pouvez vous précisez votre problème avec un petit bout de code.
0
sahahiba Messages postés 16 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 avril 2009
14 oct. 2006 à 15:19
salut,
j'ai fait un traitement et à un niveau, j'ai besion de tester sur un objet qui est declaré mais n'est pas inicialisé, exemple:
j'ai
class monthread 
{
public synchronized run()
{
//////////traitemnet
terminer=true;
}
public static boolean return_treminer()
{
  return(terminer);
}
}

et plus loin
un autre thread qui j'ai déclaré    "monthread  m1;"
et j'ai fait
while( !m1.return_treminer()){}
////////////////////////
le pb est:
avant le while j'ai pas les attributs de "monthread  " pour l'inisalisation de m1 , mais à certain moment une autre fonction fait l'inisialisation.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 oct. 2006 à 15:54
Salut,

tu ne si la méthode return_treminer n'est pas déclarée en static tu ne pourras pas l'utiliser si m1 vaut null....
donc soit tu passe une reference valide à m1 (la meilleur solution) soit du declare la methode en staitc avec les contraintes associée au static...
donc solution :

class monthread 
{
public synchronized run()
{
//////////traitemnet
terminer=true;
}
public static boolean return_treminer()
{
  return(terminer);
}
}

public classe AutreThread extends Thread{

    private monthread m1 = null;
    public AutreThread(monthread m1){
       if(m1 == null)
          throw new NullPointerException("null monthread !");//petit teste
       this.m1 = m1;//comme ca tu touche la bonne instance
    }

    public void run(){
        while( !m1.return_treminer()){}
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous