Each task submitted to this ExecutorService will be executed only once. Essentially, it will be sent to one of the nodes in the topology and executed in its public thread pool (this is a node-local thread pool used for any task or closure executions). You can control the size of this pool using IgniteConfiguration.setPublicThreadPoolSize(int poolSize) configuration property.
I ran a test where I set two nodes on two EC2s to have thread pool size of 1. I then used the ExcecutorService to kick off about 100 jobs. I could see the results being printed on the two nodes. I then fired up a new node on a new EC2 and saw it join the cluster. I was expecting to see the distribution of the remaining jobs not yet assigned to a node to propagate to this third node, but it didn't. Does that mean the ExecutorService does not dynamically assign waiting jobs to new nodes? If so, is there another way I can do that in Ignite?