Executors.newFixedThreadPool(1)和Executors.newSingleThreadExecutor()之间的区别

The*_*ind 16 java multithreading executor

我的问题是:使用它是否有意义Executors.newFixedThreadPool(1)??.在两个线程(main + oneAnotherThread)场景中,使用执行程序服务是否有效?是否通过调用new Runnable(){ }比使用ExecutorService更好地直接创建新线程?在这种情况下使用ExecutorService有什么好处和缺点?

PS:主线程和oneAnotherThread不访问任何公共资源.

我经历过:使用ExecutorService有什么好处?.并且一次只有一个线程!

ass*_*ias 15

使用有意义Executors.newFixedThreadPool(1)吗?

Executors.newSingleThreadExecutor()除了后者不可重新配置(如javadoc中所示)之外,它基本上与a相同,而前者则是将其转换为a ThreadPoolExecutor.

在两个线程(main + oneAnotherThread)中,使用执行程序服务是否有效?

执行程序服务是一个非常薄的线程包装器,可以显着简化线程生命周期管理.如果您唯一需要的是继续new Thread(runnable).start();前进,那么就不需要ExecutorService.

在任何大多数现实生活中,监视任务生命周期的可能性(通过返回的Futures),执行者将在未捕获的异常情况下根据需要重新创建线程的事实,回收线程的性能增益与创建新的等等,使执行器服务成为一个更加强大的解决方案,而且成本很低.

结论:我没有看到使用执行程序服务与线程的任何缺点.

Executors.newSingleThreadExecutor().执行(命令)和新线程(命令).start()之间的区别; 经历了两个选项之间行为的微小差异.

  • `((ThreadPoolExecutor)fixedThreadPool).setMaximumPoolSize(10);`并且它不再是单个线程池. (3认同)