如何异步删除文件

时间:2015-10-12 15:01:59

标签: java file asynchronous delete-file

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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();
            }
        });
    }
}

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