Java Thread How to - Make sure that Callable executes sequentially








Question

We would like to know how to make sure that Callable executes sequentially.

Answer

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
//w w w . j a  va2 s  .  com
public class Main {
  public static void main(String[] args) throws Exception {
    BlockingQueue<Runnable> blockingQueue = new ArrayBlockingQueue<Runnable>(48);
    ThreadPoolExecutor testExecutor = new ThreadPoolExecutor(6, 10, 1,
        TimeUnit.SECONDS, blockingQueue);
    List<Future<String>> futures = new ArrayList<>();
    for (int i = 0; i < 20; i++) {
      Future<String> testFuture = testExecutor.submit(new MyCallable(i));
      futures.add(testFuture);
    }
    for (Future<String> testFuture : futures) {
      System.out.println("Output Returned is : " + testFuture.get());
    }
  }
}
class MyCallable implements Callable<String> {
  int id;
  public MyCallable(int id) {
    this.id = id;
  }
  @Override
  public String call() throws Exception {
    System.out.println("Running " + this.id);
    return "Called " + this.id;
  }
}