对于线程池,单例,枚举的结合
项目使用同一个线程池,需要保证线程池的唯一,不能到处创建线程池,这个时候使用单例,但是普通的单例并不能保证其安全性,往往需要加上synchronized,这个时候可以使用枚举,利用枚举的线程安全特性及枚举的序列化处理
节省代码量 易读,比起使用synchronized更明了
public class ThreadExecutor {
private int poolNum;
private ExecutorService threadPool;
private ThreadExecutor() {
this.poolNum = 50;
this.threadPool = null;
if (this.threadPool == null) {
this.threadPool = Executors.newFixedThreadPool(this.poolNum);
}
}
public static ThreadExecutor getInstance() {
return ThreadExecutor.SingleTon.SINGLE_TON.executor;
}
public void execute(Runnable command) {
this.threadPool.execute(command);
}
private static enum SingleTon {
SINGLE_TON(new ThreadExecutor());
ThreadExecutor executor;
private SingleTon(ThreadExecutor ex) {
this.executor = ex;
}
}
}
单例模式使用内部类来维护单例的实现,JVM内部的机制能够保证当一个类被加载的时候,这个类的加载过程是线程互斥的。这样当我们第一次调用getInstance的时候,JVM能够帮我们保证instance只被创建一次,并且会保证把赋值给instance的内存初始化完毕,这样我们就不用担心上面的问题。同时该方法也只会在第一次调用的时候使用互斥机制,这样就解决了低性能问题。
参考文章:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
第一次发布文章,思想上一些变化,原本只是用简书做一些自己的知识记录与总结,现在想 自己的总结未必是正确,所以决定整理以前的文章,慢慢发,有人看的话,如果有问题 也可以请网友拨忙斧正,或共同学习
期间参考学习的资料很多,如有侵权,通知后立删
原记录时间 2017.10.12
发布文章时间 2018.5.10
网友评论