如何让线程等到创建文件?

时间:2008-12-09 12:05:52

标签: java multithreading file

我需要一个线程来等待文件存在或创建。 到目前为止,我有以下代码:

while(!receivedDataFile.isFileExists("receiveddata.txt"))
{
    try {
        Thead.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
        return null;
    }
}

当我运行它时,会出现以下异常,并且线程结束:

java.lang.InterruptedException: sleep interrupted

5 个答案:

答案 0 :(得分:4)

线程在阻塞(对sleep的调用)时被中断,另一个线程调用其interrupt方法。必须明确调用interrupt才能实现此目的。

似乎重复检查文件将是逻辑上的事情,如果线程被中断,但不知道中断的原因,很难说。

与往常一样,在谈到线程时,Brian Goetz在InterruptedException问题上有话要说:

http://www-128.ibm.com/developerworks/java/library/j-jtp05236.html

答案 1 :(得分:3)

我必须同意Bombes评论:线程不会自行中断。与Jokis评论相反 - 当线程上下文交换发生时它们也没有被中断(事实上,如果一个线程休眠,它将把它的量子交给任何有工作要做的线程,但我离题了。)

此外,我建议使用另一种通讯方式,而不是轮询文件。例如,你无法确定,一旦你发现了一个文件,它就完全没有文件编写器的额外工作(例如在准备好时重命名,或者创建一个'就绪'文件)。

考虑使用更多“数据推送”,例如RMI,HTTP-POST,JMS队列等。

答案 2 :(得分:2)

你应该找出哪个线程中断该线程。线程不会自己做。

答案 3 :(得分:0)

如果你想要的只是在创建文件时的通知,并且你可以(并且愿意)去本地(JNI)并且你只想获得win32支持,你可以使用代码here

答案 4 :(得分:0)

好吧,如果您不知道InterruptedException是什么和/或不想对它做任何事情,显然除了返回和退出循环之外,你应该至少做一些事情。取出回报,然后你会继续等待。

但我会检查你为什么被打断。有人试图取消你的帖子。