【发布时间】:2020-01-30 17:25:23
【问题描述】:
我正在尝试在 Vert.x 中创建自己的异步自定义方法,类似于他们的代码:
// call the external service
WebClient client = WebClient.create(vertx);
client.get(8080, "localhost:8080", "/fast").send(ar -> {
if (ar.succeeded()) {
HttpResponse<Buffer> response = ar.result();
System.out.println("response.bodyAsString()" + response.bodyAsString());
} else {
System.out.println("Something went wrong " + ar.cause().getMessage());
}
});
当您运行此代码时,线程会在不阻塞所有者线程的情况下休眠,并在端点响应时执行提供的处理程序。
我找到了解决方法:“executeBlocking”、“createSharedWorkerExecutor.executeBlocking”并使用总线,但在所有这些方法中,线程都被阻塞了。
我正在寻找不阻塞容器线程的方法,但我没有找到。有一个帖子:
How can I implement custom asynchronous operation in Vert.x?
我尝试这样做,但它也阻塞了线程:
vertx.runOnContext(v -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
handler.handle(Future.succeededFuture("result"));
});
上面的代码在同一个线程中运行,但不并发运行,所以我假设线程被阻塞了。
有什么办法吗?
【问题讨论】:
标签: java asynchronous vert.x