java - 如何异步删除文件

标签 java file asynchronous delete-file

在下面,它使用 EJB 注入(inject)异步删除文件。

@Asynchronous
protected void deleteFileAsync(File file) {
    if (file != null)
        file.delete();
}

是否可以在不使用任何注释的情况下异步删除文件 和 EJB 注入(inject)?

最佳答案

从 EJB 使用文件系统是不好的做法,因为文件系统不是事务性的。

是的,可以异步删除文件:在单独的线程中执行。您可以自己创建单独的线程,如下所示:

public static void deleteFile(final File file) {
    if (file != null) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                file.delete();
            }
        }).start();
    }
}

但是如果你从循环中调用这个函数,你会创建很多无法控制的线程,这会浪费你的内存。您可以使用 Executors 避免这种情况。使用此实用程序类,您可以创建单线程线程池,它将服务于您的所有文件删除任务:

private static final ExecutorService DELETE_SERVICE = Executors.newSingleThreadExecutor();

public static void deleteFile(final File file) {
    if (file != null) {
        DELETE_SERVICE.submit(new Runnable() {
            @Override
            public void run() {
                file.delete();
            }
        });
    }
}

这里你将有一个线程,它将异步删除文件。

关于java - 如何异步删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33084308/

相关文章:

java - 有状态 bean 远程 EJB 调用第二次失败

java - 如何在没有上下文路径的情况下运行我的servlt(Jetty)

c - 如何在C中检查文件是否存在并创建新文件

PHP:从html引用phar存档内的静态文件

javascript - Javascript 中多个异步函数调用的优雅方式

java - 如何使线程 - notify()/notifyAll() 私有(private)

java - Libgdx Freetype 字体生成器错误

c - 将用户输入数组 append 到文件 [c]

javascript - 如何创建一个等待另一个模板的 onRendered 事件的方法?

Java:线程启动后如何继续执行?