Rumah >Java >javaTutorial >Bagaimanakah cangkuk penutupan dalam Java boleh digunakan untuk memastikan penamatan aplikasi yang anggun, terutamanya apabila berurusan dengan operasi fail?
Di Java, shutdown hook menyediakan cara untuk aplikasi melaksanakan tugas pembersihan selepas penamatan. Ini boleh berguna untuk memastikan atur cara dimatikan dengan anggun sekiranya berlaku gangguan yang tidak dijangka.
Pertimbangkan aplikasi berikut yang menulis nombor pada fail dalam kelompok:
<code class="java">import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; public class GracefulShutdownTest1 { private final File f; private final int N; public GracefulShutdownTest1(File f, int N) { this.f = f; this.N = N; } public void run() { try (PrintWriter pw = new PrintWriter(new FileOutputStream(f))) { for (int i = 0; i < N; ++i) { writeBatch(pw, i); } } catch (FileNotFoundException e) { e.printStackTrace(); } } private void writeBatch(PrintWriter pw, int i) { for (int j = 0; j < 100; ++j) { pw.write(Integer.toString(i * 100 + j)); if ((j + 1) % 10 == 0) { pw.write('\n'); } else { pw.write(' '); } } } public static 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(); } } }</code>
Untuk menyepadukan cangkuk penutupan ke dalam aplikasi ini, ikut langkah berikut:
<code class="java">private static volatile boolean keepRunning = true; // ... public void run() { try (PrintWriter pw = new PrintWriter(new FileOutputStream(f))) { for (int i = 0; i < N && keepRunning; ++i) { writeBatch(pw, i); } } catch (FileNotFoundException e) { e.printStackTrace(); } } // ... public static void main(String[] args) { final Thread mainThread = Thread.currentThread(); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { keepRunning = false; mainThread.join(); } }); new GracefulShutdownTest1(new File(args[0]), Integer.parseInt(args[1])).run(); }</code>
Dengan melaksanakan cangkuk penutupan, anda boleh menyediakan cangkuk yang lebih berdaya tahan aplikasi yang melaksanakan tugas pembersihan yang diperlukan sebelum ditamatkan.
Atas ialah kandungan terperinci Bagaimanakah cangkuk penutupan dalam Java boleh digunakan untuk memastikan penamatan aplikasi yang anggun, terutamanya apabila berurusan dengan operasi fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!