浅谈安卓线程池相关问题

作为一个标准的程序员,我们都非常清楚。线程的创建和销毁时一个耗时的操作,如果在程序中反复创建和销毁,那么APP的流畅度会很受影响,甚至会奔溃。为了增加程序健壮性且能是实现复杂业务逻辑,这时候我们引入线程池的概念。

线程池的优点在于减少了创建线程的消耗,每一次使用线程直接从线程池中拿来用即可,缺点就是线程池会一直占用内存,如果当我们只是用一个线程时,多余的创建出来的会造成资源浪费,也就是惊群现象。

A:线程的实现方法

 POOL_SIZE = 4;// 线程池的大小最好设置成为CUP核数的2N    

MAX_POOL_SIZE = 6;// 设置线程池的最大线程数 

 KEEP_ALIVE_TIME = 4;// 设置线程的存活时间 

 // 创建线程池工厂         ThreadFactory factory = new PriorityThreadFactory("threadpool", android.os.Process.THREAD_PRIORITY_BACKGROUND);        

 // 创建工作队列       

BlockingQueue<Runnable> workQueue = new LinkedBlockingDeque<Runnable>();      mExecutor = nThreadPoolExecutor(POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS, workQueue, factory);   }  

 // 在线程池中执行线程 id

 submit(Runnable command){ 

 Executor.execute(command)}; 

 //在线程池的停止和关闭

ThreadPoolExecutor提供了两个方法,用于线程池的关闭,分别是shutdown()和shutdownNow(),其中:
shutdown():不会立即终止线程池,而是要等所有任务缓存队列中的任务都执行完后才终止,但再也不会接受新的任务
shutdownNow():立即终止线程池,并尝试打断正在执行的任务,并且清空任务缓存队列,返回尚未执行的任务


B:execute()执行


addIfUnderCorePoolSize():在线程池大小小于核心线程池大小的情况下,扩展线程池
addIfUnderMaximumPoolSize():在线程池大小小于线程池大小上限的情况下,扩展线程池
ensureQueuedTaskHandled():保证在线程池关闭的情况下,新加入队列的线程也能正确处理


C:核心线程问题

核心线程会一直存活,即使没有任务需要处理。当线程数小于核心线程数时,即使现有的线程空闲,线程池也会优先创建新线程来处理任务,而不是直接交给现有的线程处理。核心线程在allowCoreThreadTimeout被设置为true时会超时退出,默认情况下不会退出




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值