美文网首页
关于线程池单例的使用

关于线程池单例的使用

作者: 壹树YS | 来源:发表于2017-11-22 17:55 被阅读0次

我们在开发项目过程中肯定会常常使用到多线程,如果你做的APP越来越大越来越复杂或者说异步操作的过程越来越多的话,那么对于多线程的使用就会越来越多,而这时候就的需要对于线程进行有效的管理了。
很不错的是Java当中就已经有了线程池的方式来对线程进行管理了,然而我们在使用的过程中在不同的界面需要自己手动创建这个线程池,然后再使用,那么有没有一种方式是可以统一对线程进行管理呢。经过我的一些思考,想到了可以通过创建线程的单例模式来对线程进行同意管理,这样一方面可以监控到所有使用到异步线程的操作,也可以进行自定义的控制。

下面附上我的线程池单例模式的代码,代码很简单。

public class ThreadPoolSingleton {
    private ExecutorService executorService;
    private final int availableProcessor = Runtime.getRuntime().availableProcessors();
    private ThreadPoolSingleton() {
        if (executorService == null) {
            int coreNum = availableProcessor / 2;
            
            // 用单例模式创建线程池,保留2个核心线程,最多线程为CPU个数的2n+1的两倍.
            int maxProcessor = (availableProcessor * 2 + 1) * 2 ;

            executorService = new ThreadPoolExecutor(coreNum > 2 ? 2 : coreNum, maxProcessor,
                    60L, TimeUnit.SECONDS,
                    new SynchronousQueue<Runnable>());
        }
    }


    private static ThreadPoolSingleton instance;

    public static ThreadPoolSingleton getInstance() {
        if (instance == null) {
            instance = new ThreadPoolSingleton();
        }
        return instance;
    }

    int executeThreadNum = 1;
    public void executeTask(Runnable runnable) {
        executorService.execute(runnable);
       Log.d("ThreadPoolSingleton ", String.format("异步线程执行了%d次。", executeThreadNum++));
    }

//    /**这个方法可根据你的需要添加*/
//    public <T> Future<T> submit(Runnable task, T result){
//        return executorService.submit(task, result);
//    }
//
//    /**这个方法可根据你的需要添加*/
//    public Future<?> submit(Runnable task){
//        return executorService.submit(task);
//    }
}

用法

将以上的代码复制到你的项目中。
在你需要直接使用的异步操作的地方直接调用就可以了。

例子:

ThreadPoolSingleton.getInstance().executeTask(new Runnable() {
    @Override
    public void run() {
        //在这里写上你需要异步操作的代码
    }
});

上面的用法是不是超级简单。而且异步线程也很方便的进行管理,也可以看到你的APP运行期间运行了多少次异步操作。

欢迎转载,转载请注明出处!

相关文章

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

    对于线程池,单例,枚举的结合 项目使用同一个线程池,需要保证线程池的唯一,不能到处创建线程池,这个时候使用单例,但...

  • 线程池创建和相关知识

    线程池创建(单例):Android线程池得要这么用 - 简书 线程池相关知识:Android开发之线程池使用总结 ...

  • 关于线程池单例的使用

    我们在开发项目过程中肯定会常常使用到多线程,如果你做的APP越来越大越来越复杂或者说异步操作的过程越来越多的话,那...

  • 1.4 创建型-单例模式

    单例模式使用场景:如果一个类只需要有一个对象,比如线程池,则可以使用单例模式。 单例模式实现方式:通过对构造方法私...

  • 内存优化

    对象创建,回收和内存习惯处理 线程处理 使用单例模式 对象池的概念多线程 缓存处理,多使用软引用和弱引用,避免使用...

  • OC 和 swift 创建单例方法

    OC单例 1.使用GCD(推荐使用) 2.单线程模式单例 此单例只有在单个线程使用的情况下实用,在多线程的情况下,...

  • 设计模式--单例模式

    单例模式 使用场景 具有资源管理功能的应用多用单例模式: 线程池,缓存,日志对象,对话框,打印机,显卡的驱动程序等...

  • 设计模式02_单例模式_Singleton

    1.什么情况下使用单例模式? 有些对象只有一个,比如配置文件,工具类,线程池,缓存,日志对象等等。单例模式保证应用...

  • 常用设计模式 单例模式-懒汉式

    懒汉单例 多线程情形 上面的程序使用单线程时不会有问题,但是使用多线程时会破坏单例。运行以下程序lazySingl...

  • Java多线程--并行模式与算法

    Java多线程--并行模式与算法 单例模式 虽然单例模式和并行没有直接关系,但是我们经常会在多线程中使用到单例。单...

网友评论

      本文标题:关于线程池单例的使用

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