我在想,Executors.newSingleThreadExecutor()和Executors.newFixedThreadPool(1)
之间有什么区别以下内容摘自javadoc
与其他等同物不同 newFixedThreadPool(1)返回 遗嘱执行人保证不会 可重新配置以使用其他 线程。
我尝试下面的代码,似乎没什么区别。
package javaapplication5;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author yan-cheng.cheok
*/
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
//ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
ExecutorService threadExecutor = Executors.newFixedThreadPool(1);
threadExecutor.submit(new BadTask());
threadExecutor.submit(new Task());
}
class BadTask implements Runnable {
public void run() {
throw new RuntimeException();
}
}
class Task implements Runnable {
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("[LIVE]");
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
我的理解很可能是错误的:)
答案 0 :(得分:7)
就像它说:
与其他等效的newFixedThreadPool(1)不同,保证返回的执行程序不可重新配置以使用其他线程。
不同之处在于(仅)SingleThreadExecutor无法在以后调整其线程大小,您可以通过调用ThreadPoolExecutor#setCorePoolSize(需要先进行强制转换)来使用FixedThreadExecutor进行调整。