channel1.connect("test-cluster");
channel2.connect("test-cluster");
Util.waitUntilAllChannelsHaveSameSize(20000, 1000, channel1, channel2);
final ExecutionService executionService=new ExecutionService(channel1);
ExecutionRunner executionRunner1=new ExecutionRunner(channel1);
ExecutionRunner executionRunner2=new ExecutionRunner(channel2);
Thread runner1=new Thread(executionRunner1);
threads.add(runner1);
runner1.start();
Thread runner2=new Thread(executionRunner2);
threads.add(runner2);
runner2.start();
final AtomicInteger submittedTasks=new AtomicInteger();
final AtomicInteger finishedTasks=new AtomicInteger();
final FutureListener<Void> listener=new FutureListener<Void>() {
@Override
public void futureDone(Future<Void> future) {
finishedTasks.incrementAndGet();
synchronized(ExecutingServiceTest2.this) {
ExecutingServiceTest2.this.notify();
}
}
};
Thread submitter=new Thread(new Runnable() {
@Override
public void run() {
// Two long running tasks that should be sent to each runner
submit(true);
submit(true);
while(!Thread.interrupted()) {
submit(false);
// Throttle
try {
Thread.sleep(50);
}
catch(InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
private void submit(boolean wait) {
Callable<Void> task=new Wait(wait);
NotifyingFuture<Void> future=executionService.submit(task);
submittedTasks.incrementAndGet();
future.setListener(listener);
}
});