java.io.File.isFile() 在不同线程中返回不同的值

标签 java multithreading

我有一些代码执行想要延迟运行。 (假设 10 秒后)。在此代码执行中,我需要检查提供的文件是否确实是“正常”文件而不是目录。

    for (File f : pAttachments) {
        f.isFile(); // returns true, if file is a "normal" file
    }

    Timer tx = new java.util.Timer();
    tx.schedule(new java.util.TimerTask() {
        @Override
        public void run() {
            for (File f : pAttachments) {
                f.isFile(); // returns false, even if file is a "normal" file
            }
            tx.cancel();
        }
    }, 10000);

我期望的是计时器中的执行会像外部执行一样运行,但事实并非如此。这种行为有原因吗?

最佳答案

mikeb 和 VGR 都对。涉及一个清理步骤,删除了附件。我没有想到检查文件是否仍然存在,因为我假设 f.isFile() 会抛出异常,但事实并非如此。

我删除/更改了清理,因此提供的文件不会直接删除。之后计时器中的代码返回 f.isFile() 的正确结果。

关于java.io.File.isFile() 在不同线程中返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57593603/

相关文章:

标记上的 Java 语法错误、构造错误

java - Java 中带有抽象类的菱形继承(钻石问题)

java - 从 ImageView 中打开菜单

C:暂停 system() 调用

c++ - 如何在 C++11 的函数内初始化线程安全的静态常量 vector ?

java - 无法在泛型中实例化类型

java - 对我的 logout.jsp 代码的其他修复

c++ - VC++ 和 GCC 下 boost::condition_variable 的不同行为

c++ - POSIX 条件变量和互斥量 "competition"

c - openmp 排序临界区