IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Thread Séquence de déroulement


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut Thread Séquence de déroulement
    Suite au pb posé http://www.developpez.net/forums/d91...deamon-thread/,
    j'ai bâti ceci mais lors du test la trace dans la console ne répond pas à ce que j'attendais.

    PB:
    Création d'un Thread deamon -> t1
    Création d'un Thread -> t2
    Lancement de t1 puis t2

    Console:
    t1 s'exécute puis t2 s'exécute
    alors que je pensais que l'exécution de t1 et de t2 devrai se chevaucher et t2 clôture t1 quelque soit le cas (ce qui correspond à mon besoin).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    package librairie;
     
    import java.util.TimerTask;
     
     
    public class ThreadJournalier extends TimerTask{ 
     
    	public ThreadJournalier(){
    		System.out.println("Constructeur de ThreadJournalier");
    		Thread t1 = new Thread(new DaemonThread());
    		t1.setDaemon(true);
    		Thread t2 = new Thread(new NormalThread());
    		t1.setDaemon(false);
    		t1.start();
    		t2.start();
    	}
     
    	public void run(){
    		System.out.println("Méthode run de ThreadJournalier"); 	
    	}
    }
     
    //****************************************************************************************
     
    class DaemonThread extends Thread{
     
    	public DaemonThread(){
    		//traitement information nouvelle version + évolutions
    		System.out.println("Constructeur DaemonThread de class.DaemonThread");
    		String[] uri = {"http://www......maint.xml",""};
    		gestionEvolution.SimpleSaxParser.main(uri);
    	}
     
    	public void run(){
    		System.out.println("Méthode run de class.DaemonThread");  	
    	}
    }
     
    //****************************************************************************************
     
    class NormalThread extends Thread{
     
    	public NormalThread(){
    		//
    		System.out.println("Constructeur NormalThread de class.NormalThread");
    		librairie.TraitementFtp.Traitement();
    	}
     
    	public void run(){
    		System.out.println("Méthode run de class.NormalThread");  	
    	}
    }
    J'ai besoin de vos lumières
    Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    vu qu'il n'y a qu'un system.out.println dans tes run, donc un code qui s'exécute en quelque microsecondes, tu ne risque pas de voir des masses le chevauchement. En fait le premier thread aura déjà fini de travailler en parallèle du thread principal avant que le deuxième n'ai eu le temps de se lancer.


    Remplace tes run par une boucle avec un sleep autour de tes system.out.println et là tu verra bien les chevauchements.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    OK tu penses que le délais de chargement et de traitement du fichier xml est si court que je ne verrais pas le chevauchement? pourtant il y a 10 rqtes sql à exécuter et une centaine de lignes à parser.

    J'ai fais un test en invsersant les 2 class appelées par t1 et t2 et le pb est idem.

  4. #4
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    En principe le traitement devrait se faire dans la méthode run tandis que ton cas, il est fait dans le constructeur.

    Pourquoi t1 et t2 devraient-il se chevaucher? Existe-t-il une "synchro" entre les deux threads?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Mengué georges Voir le message
    OK tu penses que le délais de chargement et de traitement du fichier xml est si court que je ne verrais pas le chevauchement? pourtant il y a 10 rqtes sql à exécuter et une centaine de lignes à parser.
    Tu ne fais pas ces traitement dans le run, dans le run je ne vois qu'un System.out.println. Les traitement du constructeur sont, naturellement, fait au moment du new.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    Bonjour
    OK je me suis mélangé les pinceaux.
    Question:
    L'import et le traitement de mon pb doit se faire dans la méthode run si j'ai bien compris.
    Actuellement j'effectue ce traitement via SAX. Si par la méthode run (t1) je lance le traitement en appelant la class existante, je crèe un autre thread (t3) qui ne sera pas cloturé par la fermeture du deamon t1.
    Donc pour résoudre mon pb je doit importer mon fichier via t1 et ne lancer le traitement que lorsque t2 sera cloturé.

    Merci pour vos éclaircissement

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    heu j'ai absolument rien compris à ton message, je l'ai pourtant lu trois fois.

    Tu fait ton import, puis tu fait ton traitement, le tout dans une même thread, à priori. Inutile d'essayer de faire le traitement dans un thread séparé, puisque tu ne peux pas faire ce traitement tant que tu n'a pas importé tes données (si j'ai bien tout compris).

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    Dans le cas particulier que je veux traiter: appel du fichier, ouverture du flux et plantage serveur

    Ce que je voulais dire c'est que je ne sais pas comment SAX importe et traite le fichier via XMLReader. Je lui passe une url et puis ?

    Si j'enregistre et teste l'existance du fichier ou une fermeture normale du thread deamon (chargement ok), je peux lancer un traitement et pas de plantage.

  9. #9
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    en fonction du protocole (http:, file:, ...) il va ouvrir soit une connexion ou un fichier pour lire un flux de données. SAX doit probablement déléguer à une classe (URLConnection?) l'ouverture du flux .

    Gères-tu correctement les exceptions pour mieux cerner l'origine du "plantage"?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    Oui elles sont gérées
    Ce qui s'est passé c'est que dans le déroulement de la séquence de connexion l'appel a ce fichier est effectué directement. Comme le serveur hébergeur du fichier s'est planté (pb de mémoire je pense), la séquence de connexion s'est arrêtée à ce point => blocage de l'appli sur la page de connexion plutôt que plantage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Thread Supervision + Exécution séquence
    Par flolebreton dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 29/01/2013, 19h10
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo