J'essaie de m'assurer que mon application Java prend des mesures raisonnables pour être robuste, et cela implique en partie l'arrêt en douceur. Je lis sur hooks d'arrêt et je ne sais pas vraiment comment les utiliser dans la pratique.
Existe-t-il un exemple pratique?
Disons que j'ai eu une application très simple comme celle-ci ci-dessous, qui écrit des nombres dans un fichier, 10 sur une ligne, par lots de 100, et je veux m'assurer qu'un lot donné se termine si le programme est interrompu. Je comprends comment enregistrer un hook d'arrêt mais je n'ai aucune idée de comment l'intégrer dans mon application. Aucune suggestion?
package com.example.test.concurrency;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
public class GracefulShutdownTest1 {
final private int N;
final private File f;
public GracefulShutdownTest1(File f, int N) { this.f=f; this.N = N; }
public void run()
{
PrintWriter pw = null;
try {
FileOutputStream fos = new FileOutputStream(this.f);
pw = new PrintWriter(fos);
for (int i = 0; i < N; ++i)
writeBatch(pw, i);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
finally
{
pw.close();
}
}
private void writeBatch(PrintWriter pw, int i) {
for (int j = 0; j < 100; ++j)
{
int k = i*100+j;
pw.write(Integer.toString(k));
if ((j+1)%10 == 0)
pw.write('\n');
else
pw.write(' ');
}
}
static public void main(String[] args)
{
if (args.length < 2)
{
System.out.println("args = [file] [N] "
+"where file = output filename, N=batch count");
}
else
{
new GracefulShutdownTest1(
new File(args[0]),
Integer.parseInt(args[1])
).run();
}
}
}