java 线程池单例_关于线程池单例的使用

本文介绍了一种通过线程池单例模式实现线程统一管理和监控的方法,展示了如何创建一个线程池实例并简化在不同界面的异步操作调用。通过使用这个模式,开发者可以轻松监控异步任务执行次数并进行自定义控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在开发项目过程中肯定会常常使用到多线程,如果你做的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());

}

}

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 Future 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运行期间运行了多少次异步操作。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值