Android多线程

Android多线程

1、线程是什么?

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

2、为什么要使用多线程?

避免阻塞、避免CPU空转、提升性能 

并且针对于Android手机来说:主线程是不能执行耗时操作的(包括网络请求、下载等操作)、否则就会出现ANR(Application Not Responding)。

3、Android中多线程

1、extends Thread or implements runable

最常用的一种多线程方式。

使用:

2、implements Callable

比较少见的一种方式。

使用:

3、匿名线程

最简单的使用。

4、AsyncTask

AsyncTask是Android自带的一种自定义的多线程任务类,让多线程任务变得简单。

AsyncTask包括线程使用前的配置,线程进行中的任务执行,进行中的任务进度反馈,任务完成后返回结果,都可以进行自定义。

使用:

5、线程池

除非是大型的应用,否则很少使用。

线程池的好处:

1:对多个线程进行统一地管理,避免资源竞争中出现的问题。

2:(重点):对线程进行复用,线程在执行完任务后不会立刻销毁,而会等待另外的任务,这样就不会频繁地创建、销毁线程和调用GC。

常用的线程池:

1:ThreadPoolExecutor 创建基本线程池

创建线程池:

  public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory) {
        ...
    }

参数说明:

corePoolSize: 该线程池中核心线程的数量。

maximumPoolSize:该线程池中最大线程数量。

keepAliveTime:非核心线程空闲时要等待下一个任务到来的时间,当任务很多,每个任务执行时间很短的情况下调大该值有助于提高线程利用率。

unit:上面时间属性的单位。

workQueue:阻塞任务队列,当核心线程都被占用时,将任务放入阻塞队列。

threadFactory:线程工厂,可用于设置线程名字等等,一般无须设置该参数。

使用:

执行逻辑:

1.execute一个线程之后,如果线程池中的线程数未达到核心线程数,则会立马启用一个核心线程去执行。

2.execute一个线程之后,如果线程池中的线程数已经达到核心线程数,且workQueue未满,则将新线程放入workQueue中等待执行。

3.execute一个线程之后,如果线程池中的线程数已经达到核心线程数但未超过非核心线程数,且workQueue已满,则开启一个非核心线程来执行任务。

4.execute一个线程之后,如果线程池中的线程数已经超过非核心线程数,则拒绝执行该任务,采取饱和策略,并抛出RejectedExecutionException异常。

2:FixedThreadPool (可重用固定线程数)

特点:参数为核心线程数,只有核心线程,无非核心线程,并且阻塞队列无界。

3:CachedThreadPool (按需创建)

特点:没有核心线程,只有非核心线程,并且每个非核心线程空闲等待的时间为60s,采用SynchronousQueue队列。

4:SingleThreadPool(单个核线的fixed)

5:ScheduledThreadPool(定时延时执行)

6:自定义的PriorityThreadPool(队列中有优先级比较的线程池)

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值