Saya mencoba memastikan aplikasi Java saya mengambil langkah-langkah yang wajar untuk menjadi kuat, dan bagian dari itu melibatkan mematikan dengan anggun. Saya membaca tentang shutdown hook dan saya tidak benar-benar mengerti bagaimana memanfaatkannya dalam praktik.
Apakah ada contoh praktis di luar sana?
Katakanlah saya memiliki aplikasi yang sangat sederhana seperti ini di bawah, yang menulis angka ke sebuah file, 10 ke sebuah baris, dalam batch 100, dan saya ingin memastikan batch tertentu selesai jika programnya terputus. Saya mendapatkan cara mendaftarkan hook shutdown tetapi saya tidak tahu bagaimana mengintegrasikannya ke dalam aplikasi saya. Ada saran?
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();
}
}
}