2016-12-17 9 views
0

WorkerExecutorエグゼキュータを作成し、2つの長期コードを実行しようとしました。私のコード:実行後のブロッキングコードが1つのスレッドで実行されます

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つのスレッドで実行されるのはなぜ?

答えて

1

私はドキュメントで答えを見つけて、私は実行する必要があります:偽=命じたと

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

、そうでない場合は私のコードは、同じコンテキスト

ではない並行して、連続的に動作します
関連する問題