2016-12-17 3 views
0

Ich erstellt WorkerExecutor-Executor und versuchte 2 Langzeite Code auszuführen. Mein Code:Sperrcode wird in dem einen Thread ausgeführt

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()); 
     }); 
    } 
} 

Ausgabe nach Ausführung:

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

Warum Code Blockierung nur in dem einen Faden konsequent ausgeführt wird?

Antwort

1

ich Antwort in der Dokumentation gefunden, muss ich ausführen:

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

mit bestellt = false, sonst wäre mein Code seriell arbeiten, nicht parallel im selben Kontext

Verwandte Themen