首页javaconcurrentJava Thread - 如何使线程以与它们以执行者开始的相同的顺序结束

Java Thread - 如何使线程以与它们以执行者开始的相同的顺序结束

我们想知道如何使线程以与它们以执行者开始的相同的顺序结束。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class Main {
  static int MAX_THREADS = 10;

  public static void main(String[] args) throws Exception {
    System.out.println("Thread pool size = " + MAX_THREADS);
    ExecutorService executor = Executors.newFixedThreadPool(MAX_THREADS);
    Future previousFuture = null;
    for (int i = 0; i < MAX_THREADS; i++) {
      JobRunnable job = new JobRunnable(i, previousFuture);
      previousFuture = executor.submit(job);
    }
    executor.shutdown();
    executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
    System.out.println("Program done.");
  }
}

class JobRunnable implements Runnable {
  int _lineIdx;
  Future f;

  public JobRunnable(int lineIdx, Future previousFuture) {
    _lineIdx = lineIdx;
    f = previousFuture;
  }

  public void run() {
    try {
      Thread.sleep(1000);
      String currentThreadName = Thread.currentThread().getName();
      System.out.println("Thread " + currentThreadName
          + " is done with its work on line " + _lineIdx);
      if (f != null) {
        System.out.println("Thread " + currentThreadName
            + " will wait for future " + f + " before printing its results.");
        f.get();
      }
      System.out.println("RESULT: " + _lineIdx + " (Printed on Thread "
          + currentThreadName + ")");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}