2010-10-12 36 views
1

我想知道,是什么之间Executors.newSingleThreadExecutor()Executors.newFixedThreadPool(1)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); 
       } 
      } 
     } 
    } 
} 

最可能出错了我的理解:)

回答

7

就像它说:

与其他等效的newFixedThreadPool(1)所返回的执行保证无需重新配置使用额外的线程。

的区别是(只),该SingleThreadExecutor不能有自己的螺纹尺寸调整以后,你可以通过调用ThreadPoolExecutor#setCorePoolSize用FixedThreadExecutor做的(首先需要铸造)。

+0

但是,如何调整newFixedThreadPool(1)的线程大小? – 2010-10-12 01:39:42

+3

((ThreadPoolExecutor)newFixedThreadPool(1))。setCorePoolSize(3); – Thilo 2010-10-12 01:42:01

相关问题