【问题标题】:How to wait for one task to finish before in java?如何在java中等待一项任务完成?
【发布时间】:2019-08-06 12:04:17
【问题描述】:

我有一个字符串,我正在解析它并将其存储到 JsonArray 中,然后对其进行迭代。有一个竞争条件,我的解析器没有完成,控制继续前进。我希望先完成然后继续。

我试图等待并通知。它不工作。

Response res = run(el);
JsonParser parser = new JsonParser();
JsonElement jsonTree = parser.parse(res.body().string());

try {
    wait();
} catch(InterruptedException e) {
    e.printStackTrace();
}

System.out.println("jsontree  :  "+ jsonTree);

JsonArray array=jsonTree.getAsJsonArray();

notifyAll();
if(jsonTree.isJsonArray()) {
     System.out.println("I am JSONARRAY");
}

for(JsonElement element: array) {
     count++;
     System.out.println("count   "+ count);
}

现在 jsonTree 是空的,看起来像这样:[]。我希望 jsonTree 有对象。有什么建议吗?

【问题讨论】:

  • 你能提供必要的类来编译它吗?在您想要等待线程完成的通常情况下,您将使用 Thread.join() 方法。
  • JsonParser.parse 是一个阻塞调用,所以不会有竞争条件。你确定res.body()实际上返回的是一个非空的json吗?

标签: java json parsing


【解决方案1】:

默认情况下,Java 是逐行执行的,即默认情况下其本质上是同步的。这意味着一旦你的解析器完成,那么它只会移动到下一行。您不需要任何异步方式来实现它。只需检查您的响应 obj 和解析器的正确性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2012-07-23
    相关资源
    最近更新 更多