我想在差异线程上运行verx上的无限循环。 应该是这样的:
vertx.executeBlocking(future -> {
while(true){
}
//some logic (e.g waiting on blocking-code)
}
事实是,即使对于executeBlocking线程,在vertx上你也可以增加全局超时。但我想为此执行设置非超时警告,因为它将永远运行
答案 0 :(得分:0)
你没有。
如果你有一个触发处理的条件,那么处理就会发生,而不是在无限循环内。
示例:
while ((event = eventQueue.take()) != null) {
final Vertx target = event.target;
executor.submit(() -> {
doProcessing(target);
});
}
这样做的主要原因是即使处于阻塞状态的线程也会消耗资源。如果有1000个线程在等待事件,那么系统会大大浪费时间在线程调度上。这就是为什么所有现代IO处理都以非阻塞的方式发生,与上面的代码类似。
答案 1 :(得分:0)
我有一个类似的用例,当我需要使用一个阻塞的api时,我使用了以下代码
@Override
public void start() {
vertx.<Void>executeBlocking(f -> {
while (true) {
// blocking...
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
vertx.eventBus().publish("channel.1", "msg");
}
}, voidAsyncResult -> System.out.println("done"));
}