Faire attendre un Thread jusqu'à la fin d'un autre
Bonjour,
je reviens vers vous à nouveau car j'ai un problème.
comme l'indique le titre je voudrais qu'un Thread attend la fin d'un autre.
je m'explique :
j'ai une fonction d'extraction d'archives qui est lancée depuis un thread :
Code:
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
|
public synchronized void extraireToutZip() {
byte[] buffer = new byte[1024];
try {
final Collection<File> all = new ArrayList<File>();
findFilesRecursively(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016"), all, ".zip");
for (File file : all) {
System.out.println(file.getName());
ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
ZipEntry ze = zis.getNextEntry();
while (ze != null) {
String fileName = ze.getName();
File newFile = new File(file.getParentFile() + File.separator + fileName);
// je vérifie si le fichier existe déjà pour ne pas l'extraire à nouveau
while (!newFile.getAbsoluteFile().exists()) {
System.out.println("Extraction du fichier : " + newFile.getAbsoluteFile());
if (ze.isDirectory()) {
String temp = newFile.getCanonicalPath();
new File(temp).mkdir();
}
else {
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
}
break;
}
/*else {
System.out.println("Déjà extraite !");
break;
}*/
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
System.out.println("Extraction complétée");
}
}
catch (IOException ex) {
ex.printStackTrace();
}
} |
et une fonction qui lis les fichiers extraites, lancée depuis un Thread aussi:
Code:
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
|
public synchronized void lireTout() throws IOException
{
ArrayList<String> allFiles = new ArrayList<String>();
listeRepertoire(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016"), allFiles);
try
{
File f;
FileReader fr;
BufferedReader br;
for (String file : allFiles)
{
f = new File(file);
fr = new FileReader(f);
br = new BufferedReader(fr);
System.out.println(f.getAbsolutePath());
String ligne = br.readLine();
while (ligne != null)
{
//System.out.println(ligne);
ligne = br.readLine();
}
// ligne = br.readLine();
br.close();
fr.close();
}
}
catch (IOException exception)
{
System.out.println("Erreur lors de la lecture : " + exception.getMessage());
}
} |
j'ai jamais fais de Thread du coup j'ai suivi le tuto http://viennet.developpez.com/cours/java/thread/
du coup dans le controller je fais :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//j'extraie depuis un Thread pour que l'extraction se lance en asynchrone
ThreadZip tZip = new ThreadZip();
ThreadFichier tFichier = new ThreadFichier();
tZip.start();
while(tZip.getState().equals("RUNNABLE")) {
try
{
tFichier.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
tFichier.start();
} |
j'ai tout essayé mais je sais pas quoi faire :cry:
je voudrais que tFichier attend jusqu'à que tZip ait fini :help: