Java 这是删除单独线程上的文件夹的正确方法吗?
我正在用java练习我的多线程技术。下面是一段代码,用于删除文件夹并确保:Java 这是删除单独线程上的文件夹的正确方法吗?,java,multithreading,Java,Multithreading,我正在用java练习我的多线程技术。下面是一段代码,用于删除文件夹并确保: if (freshDB) { LOG.warn("Refreshing the database!"); ExecutorService executorService = Executors.newSingleThreadExecutor(); final Future<Boolean> result = executorService.submit(new Callable<
if (freshDB) {
LOG.warn("Refreshing the database!");
ExecutorService executorService = Executors.newSingleThreadExecutor();
final Future<Boolean> result = executorService.submit(new Callable<Boolean>() {
public Boolean call() {
return FileHandler.removeFolder(dbLocation);
}
});
do {
// makes sure the folder is removed
}
while (result.get() == false);
}
if(freshDB){
LOG.warn(“刷新数据库!”);
ExecutorService ExecutorService=Executors.newSingleThreadExecutor();
最终未来结果=executorService.submit(新的可调用(){
公共布尔调用(){
返回FileHandler.removeFolder(dbLocation);
}
});
做{
//确保文件夹已删除
}
while(result.get()==false);
}
这样做对吗?如果不是,为什么?请详细说明。确保以下方法是同步的
FileHandler.removeFolder()
不,不是
首先,结尾的循环没有多大意义result.get()
将始终返回相同的值:提交的任务只执行一次,而result.get()
将返回这一次执行的结果
不管怎样,如果初始线程立即停止,等待启动的线程完成,那么启动一个新线程有什么意义呢?在初始线程中执行任何操作都会更简单、更高效。如果文件夹中的文件已经打开,则会失败。为什么要为此创建一个单独的线程?您应该运行它并观察它是否按您的要求运行。如果您遇到问题,请发布具体问题。@Bhavik Shah是正确的,但在多线程方面。这是正确的方法吗?@Preception它做了我想要的,但正如你所知,多线程问题很难看到。@侯赛因:如果是这样的话,那么你不应该使用多线程,因为哪个线程将首先运行的顺序是未定义的。当文件夹未被删除而其他代码运行时,可能会发生这种情况。但是,您可以进行类似
isFolderExists()之类的检查。