package com.desksoft.sms.thread;import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class MyPoolFactory {
private static class MyPoolHolder {
/*
corePoolSize: 线程池维护线程的最少数量
maximumPoolSize:线程池维护线程的最大数量
keepAliveTime: 线程池维护线程所允许的空闲时间
unit: 线程池维护线程所允许的空闲时间的单位
workQueue: 线程池所使用的缓冲队列
handler: 线程池对拒绝任务的处理策略 
**/

public static ThreadPoolExecutor threadPool 
= new ThreadPoolExecutor(2, 10, 3,  
                TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(10),  
                new ThreadPoolExecutor.DiscardOldestPolicy());
} public static ThreadPoolExecutor getMyPool() {
return MyPoolFactory.MyPoolHolder.threadPool;
}

public static ThreadPoolExecutor setMyPool(ThreadPoolExecutor pool) {
MyPoolFactory.MyPoolHolder.threadPool = pool;
return pool;
}
}package com.desksoft.sms.thread;import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;import com.desksoft.sms.sdcommand.SendCommand;public class MyQueueFactory {
public static class MyQueueHolder{
public static BlockingQueue<SendCommand> queue=new LinkedBlockingQueue<SendCommand>(500);
}

public static BlockingQueue<SendCommand> getMyQueue(){
return MyQueueFactory.MyQueueHolder.queue;
}
}
这里为什么把创建线程池的代码放在一个静态内部类里面,这个是有什么原因吗?创建缓冲队列,也是放在一个静态内部类里面,这有什么好处吗?

解决方案 »

  1.   

    是啊,我也觉得可以不这么做!看到就是有点疑惑,想了解放在静态内部类创建实例,有什么好处。。
      

  2.   

    不是一定要这样做
    我个人的风格是很厌恶内部类,觉得非常影响代码可读性
      

  3.   

    这个有点象那个什么单实例模式的滞后加载,对这些专用名称不太感冒,大概就这个意思
    LZ找找单实例模式的一些实现方式看看就知道了