如何异步删除文件
How to delete a file asynchronously
在下面,它使用 EJB 注入异步删除文件。
@Asynchronous
protected void deleteFileAsync(File file) {
if (file != null)
file.delete();
}
是否可以在不使用任何注释的情况下异步删除文件
和 EJB 注入?
从 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();
}
});
}
}
这里你将有一个线程,它会异步删除文件。
在下面,它使用 EJB 注入异步删除文件。
@Asynchronous
protected void deleteFileAsync(File file) {
if (file != null)
file.delete();
}
是否可以在不使用任何注释的情况下异步删除文件 和 EJB 注入?
从 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();
}
});
}
}
这里你将有一个线程,它会异步删除文件。