Android 线程池
来源:互联网 发布:wow.duowan.com数据库 编辑:程序博客网 时间:2024/06/03 20:37
Java为我们提供了ExecutorService线程池来优化和管理线程的使用
使用线程池管理线程的优点
1、线程的创建和销毁由线程池维护,一个线程在完成任务后并不会立即销毁,而是由后续的任务复用这个线程,从而减少线程的创建和销毁,节约系统的开销
2、线程池旨在线程的复用,这就可以节约我们用以往的方式创建线程和销毁所消耗的时间,减少线程频繁调度的开销,从而节约系统资源,提高系统吞吐量
3、在执行大量异步任务时提高了性能
4、Java内置的一套ExecutorService线程池相关的api,可以更方便的控制线程的最大并发数、线程的定时任务、单线程的顺序执行等
使用ThreadPoolExecutor创建一个线程池管理类:
package com.pdoctor4u.activity;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * Created by chenxiangyu on 16/2/19. */public class ThreadManager { private static ThreadProxyPool threadProxyPool; private static Object obj = new Object(); public static ThreadProxyPool getThreadProxyPool() { synchronized (obj) { if (threadProxyPool == null) { threadProxyPool = new ThreadProxyPool(5,5,5L); } return threadProxyPool; } } public static class ThreadProxyPool { private ThreadPoolExecutor threadPoolExecutor; private int corePoolSize; private int maximumPoolSize; private long keepAliveTime; private ThreadProxyPool() { } private ThreadProxyPool(int corePoolSize, int maximumPoolSize,long keepAliveTime) { this.corePoolSize = corePoolSize; this.keepAliveTime = keepAliveTime; this.maximumPoolSize = maximumPoolSize; } public void excute(Runnable runnable) { if (runnable == null) { return; } if (threadPoolExecutor == null || threadPoolExecutor.isShutdown()) { threadPoolExecutor = new ThreadPoolExecutor( //3 核心线程数 corePoolSize, //5 最大线程数 maximumPoolSize, //没有执行任务的线程存活时间 keepAliveTime, //存活时间的单位 TimeUnit.MICROSECONDS, //线程中要准备去执行任务排队的队列 new LinkedBlockingDeque<Runnable>(), //线程的工厂,创建线程 Executors.defaultThreadFactory(), //队列中如果放置不下任务时候的异常处理 new ThreadPoolExecutor.AbortPolicy()); } threadPoolExecutor.execute(runnable); } //需要中止的是线程池中任务队列里面的任务 public void cancel(Runnable runnable) { if (runnable != null) { //获取线程池对象,然后从其内部去移除相应的任务 threadPoolExecutor.getQueue().remove(runnable); } } }}
官方也不推荐使用这种方法来创建线程池,而是推荐使用Executors的工厂方法来创建线程池,Executors类是官方提供的一个工厂类,它里面封装好了众多功能不一样的线程池,从而使得我们创建线程池非常的简便,主要提供了如下四种功能不一样的线程池:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
- Java(线程)Android线程池
- Android线程,线程池相关
- Android 线程和线程池
- Android线程与线程池
- Android线程和线程池
- Android 线程和线程池
- Android线程和线程池
- Android线程与线程池
- Android线程和线程池
- Android线程与线程池
- Android 线程和线程池
- Android线程和线程池
- Android线程和线程池(四)--Android线程池
- Android ExecutorService线程池
- Android 线程池管理 .
- Android 线程池管理
- Android ExecutorService线程池
- Android 线程池管理
- iOS国际化---不跟随系统语言
- SIP中From ,Contact, Via 和 Record-Route/Route
- c++ 模板--包含本身就是模板的参数
- responder nextResponder
- 使用python爬取csdn博客访问量
- Android 线程池
- iOSnil崩溃问题
- JAVA操作properties文件
- Ionic基础——动态组件
- all notes
- Java中 == equal hashcode
- Java客户端调用memcached
- 【转载】Linux性能评测工具之一:gprof篇
- LMT LicManager系统对许可证(license)管理创新中的新附加值