Android单线程线程池的用法

我们日常的sqlite数据库操作,文件的读写操作,其实都很耗时。根据Android的规定,耗时操作不允许在主线程中进行,所以我们都会放到工作线程当中。但是这样就有可能存在同时操作的问题。我们就需要让我们的线程进行排队来操作。这里提供一种队列的实现方式--单线程线程池。

首先我们要定义一个工具类

/**
 * 单线程线程池获取
 * @author WaterWood
 */
public class SingleLineUtil {

    private static SingleLineUtil mInstance;
    private ExecutorService singleThreadExecutor;

    public static SingleLineUtil getInstance(){
        if (mInstance == null){
            synchronized (SingleLineUtil.class){
                if (mInstance == null){
                    mInstance = new SingleLineUtil();
                }
            }
        }
        return mInstance;
    }

    private SingleLineUtil() {}

    public ExecutorService getSingle(){
        if (singleThreadExecutor == null){
            synchronized (SingleLineUtil.class){
                if (singleThreadExecutor == null){
                    singleThreadExecutor =  Executors.newSingleThreadExecutor();
                }
            }
        }
        return singleThreadExecutor;
    }
}

以后项目中大家都用这类,可以保证所有操作都放到这个单线程线程池中。

接着在我们要进行单线程线程池操作的地方,定义全局变量

private ExecutorService singleThreadExecutor;

接着为该变量赋值

singleThreadExecutor = SingleLineUtil.getInstance().getSingle();

为线程池中添加一个线程

singleThreadExecutor.execute(new Runnable() {
            @Override
            public void run() {
                
            }
        });

线程中的操作放到run方法中。这样我们就可以实现一个队列执行的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,常用的线程池有以下几种: 1. ThreadPoolExecutor:是一个灵活的线程池实现,可以自定义核心线程数、最大线程数、线程池的存活时间等参数。 2. Executors.newFixedThreadPool():创建一个固定大小的线程池,线程数固定不变,适用于执行长期的任务。 3. Executors.newCachedThreadPool():创建一个可缓存的线程池,线程数根据任务的多少自动调整,适用于执行大量短期的任务。 4. Executors.newSingleThreadExecutor():创建一个单线程线程池,所有任务按照顺序执行,适用于需要保证顺序执行的任务。 5. ScheduledExecutorService:用于执行一些需要定时执行的任务,比如定时执行一些操作、周期性地执行某些任务等。 以下是一个使用 ThreadPoolExecutor 的示例代码: ``` ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( 5, // 核心线程数 10, // 最大线程数 60L, // 线程池中空闲线程的存活时间 TimeUnit.SECONDS, // 存活时间的时间单位 new LinkedBlockingQueue<Runnable>() // 等待队列 ); // 提交任务给线程池执行 threadPoolExecutor.submit(new Runnable() { @Override public void run() { // 执行任务的代码 } }); // 关闭线程池 threadPoolExecutor.shutdown(); ``` 其他类型的线程池的使用方式与 ThreadPoolExecutor 类似,只需要调用对应的方法即可。在使用线程池时,需要根据具体的业务需求选择合适的线程池类型,并根据实际情况调整线程池的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值