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<

我正在用java练习我的多线程技术。下面是一段代码,用于删除文件夹并确保:

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()之类的检查。