Tôi đang cố gắng đảm bảo ứng dụng Java của mình thực hiện các bước hợp lý để trở nên mạnh mẽ và một phần trong đó liên quan đến việc tắt một cách duyên dáng. Tôi đang đọc về móc tắt máy và tôi thực sự không biết cách sử dụng chúng trong thực tế.
Có một ví dụ thực tế ngoài kia?
Giả sử tôi có một ứng dụng thực sự đơn giản như ứng dụng này bên dưới, ghi số vào một tệp, 10 đến một dòng, theo lô 100 và tôi muốn đảm bảo một lô nhất định kết thúc nếu chương trình bị gián đoạn. Tôi nhận được cách đăng ký hook shutdown nhưng tôi không biết làm thế nào để tích hợp nó vào ứng dụng của mình. Bất kỳ đề xuất?
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();
}
}
}