Есть ли что-то, что мешает вам проверить файл блокировки из вашего процесса Java? Вы можете использовать шаблон Observer, чтобы предупредить основной поток (или любой другой поток) об изменениях в файле.
Например:
public class FileWatcher implements Observable {
private long lastModified;
private final File file;
public FileWatcher(File f) {
this.file = f;
this.lastModified = file.lastModified();
Thread t = new Thread() {
public void run() {
while(!stopThread) {
if(lastModified < file.lastModified()) {
lastModified = file.lastModified();
setChanged();
notifyObservers();
}
Thread.currentThread().sleep(5);
}
}
};
t.start();
}
}
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: вообще не проверено и не проверено, но я уверен, что вы поняли идею.
РЕДАКТИРОВАТЬ: ой, забыл петлю.
РЕДАКТИРОВАТЬ: новая идея.
У меня есть другая идея. (Я знаю, что вы уже приняли ответ, но я хотел бросить его туда.) Можно ли использовать функцию select
? В моем очень ограниченном обзоре документов MSDN это упоминается только в контексте сокетов. Я знаю, что эквивалент Linux применим к любому файловому дескриптору.
Вместо того, чтобы просто опросить файл в теме, о которой я упоминал выше, пусть это делает ОС! Передайте файл в writefds
, установленный на select
, и затем он вернется, когда файл будет изменен. Это означает, что ваш процесс не тратит драгоценное время процессора на ожидание изменений в файле.
Я не проверял, предоставляет ли Java этот вызов в JDK, поэтому может потребоваться написать интерфейс JNI, чтобы заставить его работать. Мои познания в этой области немного нечеткие, извините.
РЕДАКТИРОВАТЬ еще раз:
Нашел! Класс Selector в Java выглядит так, как будто он реализует select
. К сожалению, FileChannel нельзя выбрать, что, вероятно, необходимо в данном случае. :(
person
Tom
schedule
08.06.2011