有一个创建XML文件的外部程序,但创建可能需要一段时间。我需要我的Java程序等到文件存在后再继续。
我读了一些关于同步块的书,我读到我可以做这样的事情:
synchronized(this) {
while (!file.exists) { this.wait(); }
}
老实说,我对同步任务知之甚少,所以我想知道我是否在正确的轨道上,或者我是否偏离了轨道。
在我看来,你应该有一些东西来通知线程。下面是我的例子。
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();
}
}
所以我用了一个while循环来检查文件是否存在。如果不行,我就让线睡上一秒钟。它似乎工作正常。谢谢你的帮助。
解决这个问题的典型方法是让您的XML编写器创建XML文件,完成后,它应该创建第二个文件,说明工作已经完成。
您的java程序应该侦听. do文件而不是XML文件的存在。
但是,如果您对XML编写应用程序没有任何控制权,它将无法工作。
问题内容: 我正在尝试在Node.js / Express中创建一个路由,该路由从两个查询中读取数据,然后基于来自查询的数据来增加计数。由于Node.js是异步的,因此在读取所有数据之前会显示总计。 我创建了一个简单的示例,以达到我目前正在做的事情 我不确定要等到两个功能都完成后才能打印总计,我该做什么。我是否需要创建一个自定义事件发射器来实现这一目标? 问题答案: 拥抱异步性: 或使用Promi
我有一个方法,可以为WebView的WebEngine设置一个新的网页,需要等到网页加载完成后才能继续使用当前方法。 基本上我想要: 我尝试过使用ChangeListener(),但它只会在我的方法完成执行后执行。我在谷歌上搜索了许多导致更多挫折感的术语,比如“java非阻塞等待布尔值”。最终,我成功地启动了新线程(以防止应用程序GUI锁定)并使用了倒计时(与Thread.join()相反)。下面
我有两个JS函数。一个叫另一个。在调用函数中,我想调用另一个函数,等待该函数完成,然后继续。例如,伪代码: 我想出了这个解决方案,但不知道这是否是一个明智的方法。 这合法吗?有没有更优雅的处理方法?也许用jQuery?
问题内容: 我试图在Selenium / Python中运行一个脚本,该脚本要求在其他位置登录才能运行其余脚本。有什么办法让我告诉脚本暂停并在登录屏幕上等待,以便用户手动输入用户名和密码(也许是等待页面标题更改的内容,然后继续执行脚本)。 到目前为止,这是我的代码: 问题答案: 使用WebDriverWait。例如,这将执行google搜索,然后等待某个元素出现,然后再打印结果: 将返回lambd
我有一个加载页面,我想在其中对不相关的信息执行两个网络请求(rxjava)。在这两个请求完成之前,我不想进入下一页,即使其中一个或两个都失败了。 > 使用zip将请求绑定在一起。有没有办法不必被迫使用双函数,也不必返回null? 请求A和B有一个。doOnNext和。多恩。如果其中一个返回错误,zip observable是否继续?zip订阅服务器是否也会返回错误? 这是最好的方法吗?
我必须使用axios提出请求,以便获取一些数据,这些数据应该作为道具传递给React组件。下面是我的渲染函数: FateChBoardList是一个异步函数,因此它将返回一个promise。我可以将然后和捕获处理程序附加到返回promise,但在这种情况下,我必须在两个处理程序中放入相同的超文本标记语言代码。还有别的办法吗?