是否有理由更喜欢Executors工厂方法直接实例化类?

Yis*_*hai 3 java concurrency java.util.concurrent

是否有理由喜欢这样做:

private static ExecutorService service = Executors.newScheduledThreadPool(10);
Run Code Online (Sandbox Code Playgroud)

对此:

private static ExecutorService service = new ScheduledThreadPoolExecutor(10);
Run Code Online (Sandbox Code Playgroud)

Gra*_*ray 8

没有特别的理由,没有.在Executors静态方法有为了方便和写覆盖的标准使用情况的很大比例.

虽然不是你提到的情况,但是使用其他一些静态方法会使你的代码变得更加简单和易读.例如:

threadPool = Executors.newFixedThreadPool(10);
Run Code Online (Sandbox Code Playgroud)

与:

threadPool = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS,
      new LinkedBlockingQueue<Runnable>());
Run Code Online (Sandbox Code Playgroud)

我可以想到为什么使用这些Executors方法可能更好的唯一可能原因是,如果在将来的JDK版本中,它们更改了某些底层ExecutorService类的默认值,那么静态方法将由Sun/Oracle调整以更好地利用新的构造函数参数,您不必更改代码.

  • 不只是简化 - 我发现#1的意图比#2更清晰,更易读. (4认同)