2016-12-17 69 views
0

我创建了WorkerExecutor执行程序,并尝试执行2个长期代码段。我的代码:执行后在一个线程中执行阻止代码

public class BVerticle extends AbstractVerticle { 
    @Override 
    public void start() throws Exception { 
     WorkerExecutor executor = vertx.createSharedWorkerExecutor("worker", 10, 10000); 
     executor.executeBlocking(future -> { 
      out.printf("start 1, %s \n", Thread.currentThread().getName()); 
      try { 
       Thread.sleep(5_000L); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      future.complete(); 
     }, result -> { 
      out.printf("finish 2, %s \n", Thread.currentThread().getName()); 
     }); 
     executor.executeBlocking(future -> { 
      out.printf("start 2, %s \n", Thread.currentThread().getName()); 
      try { 
       Thread.sleep(5_000L); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      future.complete(); 
     }, result -> { 
      out.printf("finish 2, %s \n", Thread.currentThread().getName()); 
     }); 
    } 
} 

输出:

start 1, worker-0 
start 2, worker-0 
finish 2, vert.x-eventloop-thread-1 
finish 2, vert.x-eventloop-thread-1 

为什么阻塞代码只能在一个线程中执行结果?

回答

1

我发现在文档的答案,我需要执行:

executeBlocking(Handler<Future<T>> blockingCodeHandler, boolean ordered, Handler<AsyncResult<T>> resultHandler) 

与有序=假,否则我的代码将连续工作,而不是在并行在同样的背景下

相关问题