Что-нибудь мешает вам проверить файл блокировки в вашем 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 не может быть выбран, что, вероятно, требуется в этом случае.(