verrouiller un objet crée par un thread - Java - Programmation
Marsh Posté le 16-04-2013 à 10:27:13
Ton code est vraiment pas beau à voir
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 :
|
Marsh Posté le 15-04-2013 à 12:14:38
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);
}