如何使用while()循环

时间:2017-12-08 07:08:59

标签: java multithreading vert.x

我想在差异线程上运行verx上的无限循环。 应该是这样的:

vertx.executeBlocking(future -> {
while(true){
}
   //some logic (e.g waiting on blocking-code)
}

事实是,即使对于executeBlocking线程,在vertx上你也可以增加全局超时。但我想为此执行设置非超时警告,因为它将永远运行

  1. 我用vertx实现了我的目的吗?
  2. 如果情况1为真。如何从超时警告中排除此特定阻止执行

2 个答案:

答案 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"));
}
相关问题