线程通讯的几种方式

线程:操作系统执行的最小调度单位。

android中可以将线程分为两类:一类主线程 一类工作线程

主线程只做两件事情:更新ui,与用户交互

工作线程:执行耗时操作 网络请求 数据查询等等一切


android开启线程的方式:

1:thread + handler 自己实行一个looper的方式

2:handlethread 一个自己带有looper的线程

3:intentservice 内部有handlethread,属于服务的一种执行完自动结束  优点:优先级高不易被杀死。

4:Asynctask 内部有一个线程池具体使用参考 asynctask简单使用

5:自己配置线程池

线程池优点:

1:重用线程池中线程,避免因线程的创建和销毁所带来的性能开销

2:能有效控制线程池的最大并发数,避免大量的线程之间互相抢占系统资源而导致阻塞现象。

3:能对线程进行简单管理,并提供定时执行以及指定间隔循环执行等功能。

android中线程池:threadpoolexecutor

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

corePoolSize:核心线程数 

maximumPoolSize: 最大线程数 当活动线程达到这个数值 后续当任务会被阻塞

KeepAliveTime:非核心线程闲置时的超时时长 超过这个时间 非核心线程被回收。

unit:时间单位TimeUnit.MILLISECONDS毫秒  TimeUnit.SECONDS秒  TimeUnit.MINUTES分钟

workQueue:任务队列

threadFactory:线程工厂 为线程池提供创建新线程的功能


一般情况下:

核心线程等于cpu数量+1

线程池最大线程数:cpu数量*2+1

核心线程一般无超时机制,非核心线程闲置超时为1s

任务队列容量128


线程池执行任务的规则:

1:线程池中的线程数为达到核心数 直接启动核心线程

2:达到或者超过核心线程数 任务插入到队列中等待执行

3:核心线程满了 任务队列满了 启动非核心新线程

4:非核心线程达到最大数 拒绝这个任务


线程池分类:

1:FixedThreadPool 只有核心线程数 任务队列没有限制 能够更加快速地响应外界的请求

2:CachedThreadPool 只有非核心线程数量不限 任务队列为空 比较适合:执行大量的耗时较少的任务

3:ScheduledThreadPool 核心数量固定 非核心数量不限          比较适合:执行定时任务和具有固定周期的重复任务

4:SingleThreadExecutor 只有一个核心线程   确保外界的任务都在同一个线程中执行 使得任务不需要处理线程同步的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值