在不同线程中使用相同的 ExecutorService 实例是线程安全的吗?

Using same instance of ExecutorService in different threads is thread safe?

例如,我通过 ExecutorService 实例 执行可运行块,并且该可运行块通过相同的 ExecutorService 实例 执行一些异步代码。 所以我的代码看起来像:

final ExecutorService eService = Executors.newFixedThreadPool(nThreads);
    eService.execute(new Runnable() {
        public void run() {
            eService.execute(new Runnable() {
                public void run() {
                    System.out.println("Successfully created");
                }
            });
        }
    });
  1. 这段代码线程安全吗,因为 ExecutorService 没有状态?

在我的真实应用程序中,我有一些线程在其中创建了新线程,我想使用一个具有可配置线程池大小的 ExecutorService 实例(也许是一种不好的做法?)。

  1. 为不同的线程设置一个 ExecutorService 实例是一种不好的做法吗?
  2. 如果是,也许还有其他选择?

看起来不错。重用线程而不是产生新线程(这是昂贵的)是一种很好的做法,并且这种线程共享的一种可能实现是使用 ExecutorService

请记住,它适用于您提到的代码,如果您尝试等待预定操作的结果,它可能会中断。当所有线程(来自池)都将等待等待空闲线程(在该池中)执行它的操作结果时,这可能会导致明显的死锁。