Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2100 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  verrouiller un objet crée par un thread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

verrouiller un objet crée par un thread

n°2185831
bloomingda​ls
Posté le 15-04-2013 à 12:14:38  profilanswer
 

Bonjour tout le monde,
j'ai une suite de thread indépendant qui s'exécutent au même temps chacun d'entre eux crée un fichier qui lui est propre. a la suite de ces thread, j'ai une instrunction java qui prend tous ces fichiers et concatène leurs contenu. le problème est que si je ne fais pas moi même un sleep de 1minute 30 la concaténation accéde à ces fichiers alors qu'il ne sont pas encore finalisé. je sais pas comment mettre un verrou sur ces fichiers sachant que mes thread sont déclarés de manière anonyme (new thread() { blablabla }
 
voici mon code si vous pourriez m'aider ca sera gentil
 
public Bgp_Peers() throws IOException, Exception
  {  
    this.start();
  }
 
    // @Override
    public void run()  
    {  
      final Shell sh = new Shell();
      File dir= new File("/root/Desktop/Bgp_Peers" );
      if (dir.exists()==false)
      {
          dir.mkdir();
      }
      sh.setDirectory(dir);
      String cmd0="cd /root/Desktop/Bgp_Peers";
      try { sh.command(cmd0).consume();} catch (IOException ex) {Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex); }  
       
      final Vector <String> oids=loadOids();
      final Vector <String> files=loadFiles();
       
      File targetFile=new File("/var/lib/mysql/OrangeTunisie/Bgp_Peers" );
       
      // exécutions des requêtes SNMPwalk en parallèle : voila mes thread parallèles
 
       new Thread(){public void run(){String cmd="snmpwalk -Ovq -v2c -c INTERNET@orange 10.53.3.150 "+oids.elementAt(0)+ "> "+files.elementAt(0)+ "";try {
               sh.command(cmd).consume();
           } catch (IOException ex) {
               Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex);
           }
}}.start();
       new Thread(){public void run(){String cmd="snmpwalk -Ovq -v2c -c INTERNET@orange 10.53.3.150 "+oids.elementAt(1)+ "> "+files.elementAt(1)+ "";try {
               sh.command(cmd).consume();
           } catch (IOException ex) {
               Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex);
           }
}}.start();
       new Thread(){public void run(){String cmd="snmpwalk -Ovq -v2c -c INTERNET@orange 10.53.3.150 "+oids.elementAt(2)+ "> "+files.elementAt(2)+ "";try {
               sh.command(cmd).consume();
           } catch (IOException ex) {
               Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex);
           }
}}.start();
       new Thread(){public void run(){String cmd="snmpwalk -Ovq -v2c -c INTERNET@orange 10.53.3.150 "+oids.elementAt(3)+ "> "+files.elementAt(3)+ "";try {
               sh.command(cmd).consume();
           } catch (IOException ex) {
               Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex);
           }
}}.start();
       new Thread(){public void run(){String cmd="snmpwalk -Ovq -v2c -c INTERNET@orange 10.53.3.150 "+oids.elementAt(4)+ "> "+files.elementAt(4)+ "";try {
               sh.command(cmd).consume();
           } catch (IOException ex) {
               Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex);
           }
}}.start();
       new Thread(){public void run(){String cmd="snmpwalk -Ovq -v2c -c INTERNET@orange 10.53.3.150 "+oids.elementAt(5)+ "> "+files.elementAt(5)+ "";try {
               sh.command(cmd).consume();
           } catch (IOException ex) {
               Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex);
           }
}}.start();
       
       // attendre que les fichiers crées soient prêts
      try {
          this.sleep(1500);
      } catch (InterruptedException ex) {
          Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex);
      }
       
      // concaténer les fichiers voila la concaténation que je veux réaliser sans recourir à la methode sleep
       String cmd1="paste -d ':' 'peerAddr' 'peerState' 'peerStatus' 'peerRemoteAS' 'peerInUpdates' 'peerOutUpdates' > "+targetFile.getPath()+"";
       System.out.println(cmd1);
       try {
             sh.command(cmd1).consume();
             // MAJ de la table Bgp_Peers
             new UpdateOtherInfos(targetFile, "Bgp_Peers" );
           }  
       catch (IOException ex) {Logger.getLogger(Bgp_Peers.class.getName()).log(Level.SEVERE, null, ex); }
     
    }
 
    public Vector <String> loadOids()
    {
        Vector oids = new Vector();
        oids.add(".1.3.6.1.2.1.15.3.1.1" );
        oids.add(".1.3.6.1.2.1.15.3.1.2" );
        oids.add(".1.3.6.1.2.1.15.3.1.3" );
        oids.add(".1.3.6.1.2.1.15.3.1.9" );
        oids.add(".1.3.6.1.2.1.15.3.1.10" );
        oids.add(".1.3.6.1.2.1.15.3.1.11" );
         
         
        return(oids);
    }
   
    public Vector<String> loadFiles()
    {
        Vector files=new Vector();
        files.add("peerAddr" );
        files.add("peerState" );
        files.add("peerStatus" );
        files.add("peerRemoteAS" );
        files.add("peerInUpdates" );
        files.add("peerOutUpdates" );
         
         
        return(files);
    }

mood
Publicité
Posté le 15-04-2013 à 12:14:38  profilanswer
 

n°2186023
nerisson
Pic-pic
Posté le 16-04-2013 à 10:27:13  profilanswer
 

Ton code est vraiment pas beau à voir  :sweat:  
Sinon pour répondre à ta question, il faut que tu gardes une référence sur chacun de tes threads, et que tu appelles la méthode join() dessus pour attendre la fin de leur exécution.
En gros:

Code :
  1. Thread thead1 = new Thread(){public void....
  2. ...
  3. thread1.join();


---------------
Light is right

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  verrouiller un objet crée par un thread

 

Sujets relatifs
thread javaseparer 2 objet
[C#] Trier un tableau d'objetDébutant en programmation orientée objet(jeu d'échecs)
Objet ayant une vue sur le gestionnaire d'objet.Acceder à un objet OLE à distance
Un tableau est-il un objet ?Crée un systeme pour crypter les mdp
Echanges entre threadCrée un timer qui ouvre une page internet toute les 2heures
Plus de sujets relatifs à : verrouiller un objet crée par un thread


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR