美文网首页
针对保证线程池的创建 利用枚举保证单例的线程安全

针对保证线程池的创建 利用枚举保证单例的线程安全

作者: 月飞星 | 来源:发表于2018-05-10 10:16 被阅读0次

    对于线程池,单例,枚举的结合

    项目使用同一个线程池,需要保证线程池的唯一,不能到处创建线程池,这个时候使用单例,但是普通的单例并不能保证其安全性,往往需要加上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

    相关文章

      网友评论

          本文标题:针对保证线程池的创建 利用枚举保证单例的线程安全

          本文链接:https://www.haomeiwen.com/subject/mhzarftx.html