有一个外部程序可以创建XML文件,但创建可能需要一段时间。我需要我的Java程序等到文件存在之后再继续。
我一直在阅读有关同步块的内容,我读到我可以这样做:
synchronized(this) {
while (!file.exists) { this.wait(); }
}
说实话,我对同步任务并不是很了解,所以我想知道我是否走在正确的轨道上,或者我是否已离开。
答案 0 :(得分:4)
解决此问题的一种典型方法是让您的XML编写器创建XML文件,当它完成后,它应该创建第二个文件,说明工作已完成。
您的java程序应该监听.done文件而不是XML文件。
如果您对XML编写应用程序没有任何控制权,则无法工作。
答案 1 :(得分:0)
所以我用的是一个while循环来检查文件是否不存在。如果它没有,我让线程休眠一秒钟。它似乎工作正常。谢谢你的帮助。
答案 2 :(得分:-3)
在我看来,你应该有东西通知线程。以下是我的例子。
public class Test {
File file;
public Test(File file){
this.file = file;
}
public void findFile(){
synchronized(this){
while(!file.exists()){
try {
System.out.println("before wait:");
this.wait();
System.out.println("after wait:");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void createFile(){
synchronized(this){
try {
System.out.println("before create a new file:");
file.createNewFile();
System.out.println("after create a new file:");
this.notify();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args){
Test t = new Test(new File("/Users/yehuizhang/Desktop/uttp.txt"));
Thread t1 = new Thread(new FindFile(t));
Thread t2 = new Thread(new CreateFile(t));
t1.start();
t2.start();
}
}
class FindFile implements Runnable{
Test t;
public FindFile(Test t){
this.t = t;
}
@Override
public void run(){
t.findFile();
}
}
class CreateFile implements Runnable{
Test t;
public CreateFile(Test t){
this.t = t;
}
@Override
public void run(){
t.createFile();
}
}