/** Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*********************/package java.io;import java.util.*;import java.io.File;import jdk.internal.misc.SharedSecrets;/*** This class holds a set of filenames to be deleted on VM exit through a shutdown hook.* A set is used both to prevent double-insertion of the same file as well as offer* quick removal.*/class DeleteOnExitHook {private static LinkedHashSet<String> files = new LinkedHashSet<>();static {// DeleteOnExitHook must be the last shutdown hook to be invoked.// Application shutdown hooks may add the first file to the// delete on exit list and cause the DeleteOnExitHook to be// registered during shutdown in progress. So set the// registerShutdownInProgress parameter to true.SharedSecrets.getJavaLangAccess().registerShutdownHook(2 /* Shutdown hook invocation order */,true /* register even if shutdown in progress */,new Runnable() {public void run() {runHooks();}});}private DeleteOnExitHook() {}static synchronized void add(String file) {if(files == null) {// DeleteOnExitHook is running. Too late to add a filethrow new IllegalStateException("Shutdown in progress");}files.add(file);}static void runHooks() {LinkedHashSet<String> theFiles;synchronized (DeleteOnExitHook.class) {theFiles = files;files = null;}ArrayList<String> toBeDeleted = new ArrayList<>(theFiles);// reverse the list to maintain previous jdk deletion order.// Last in first deleted.Collections.reverse(toBeDeleted);for (String filename : toBeDeleted) {(new File(filename)).delete();}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。