无论是在java还是在Android,其实使用到的线程池都基本是一样的,因此本篇我们将来认识一下Java/Android线程池框架。

Java/Android线程池框架的结构主要包括3个部分

1.任务:包括被执行任务需要实现的接口类:Runnable 或 Callable

2.任务的执行器:包括任务执行机制的核心接口类Executor,以及继承自Executor的EexcutorService接口。

3.执行器的创建者,工厂类Executors

一、Executor 和 ExecutorService

Executor只是一个接口,它是Java/Android线程池框架的基础,它将任务的提交与任务的执行分离开来。

ExecutorService继承自Executor,有两个关键类实现了ExecutorService接口:ThreadPoolExecutor和ScheduledThreadPoolExecutor。

(1)ThreadPoolExecutor 是线程池的核心实现类,用来执行被提交的任务。
(2)ScheduledThreadPoolExecutor 也是一个实现类,可以在给定的延迟后运行命令,或者定期执行命令。它比Timer更灵活,功能更强大。


二、Executors工厂类

Executors是一个工厂类,它不继承任何其它类,它通过ThreadPoolExecutor、ScheduledThreadPoolExecutor创建出四种不同的线程池,分别为:

(1)newCachedThreadPool 创建一个可缓存线程池,线程池的最大长度无限制,但如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

Executors.java

 public static ExecutorService newCachedThreadPool() {     return new ThreadPoolExecutor(0, Integer.MAX_VALUE,                                      60L, TimeUnit.SECONDS,                                      new SynchronousQueue()); }

使用示例:

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();for (int i = 0; i < 10; i++) {final int index = i;try {Thread.sleep(index * 1000);} catch (InterruptedException e) {e.printStackTrace();} cachedThreadPool.execute(new Runnable() { @Overridepublic void run() {System.out.println(index);}});}

(2)newFixedThreadPool  创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

Executors.java

    public static ExecutorService newFixedThreadPool(int nThreads) {        return new ThreadPoolExecutor(nThreads, nThreads,                                      0L, TimeUnit.MILLISECONDS,                                      new LinkedBlockingQueue());    }

使用示例:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);for (int i = 0; i < 10; i++) {final int index = i;fixedThreadPool.execute(new Runnable() { @Overridepublic void run() {try {System.out.println(index);Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}
(3)newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

Executors.java

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {    return new ScheduledThreadPoolExecutor(corePoolSize);}

使用示例:表示延迟3秒执行

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);scheduledThreadPool.schedule(new Runnable() { @Overridepublic void run() {System.out.println("delay 3 seconds");}}, 3, TimeUnit.SECONDS);
使用示例: 表示延迟1秒后每3秒执行一次
scheduledThreadPool.scheduleAtFixedRate(new Runnable() { @Overridepublic void run() {System.out.println("delay 1 seconds, and excute every 3 seconds");}}, 1, 3, TimeUnit.SECONDS);

(4)newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

Executors.java

    public static ExecutorService newSingleThreadExecutor() {        return new FinalizableDelegatedExecutorService            (new ThreadPoolExecutor(1, 1,                                    0L, TimeUnit.MILLISECONDS,                                    new LinkedBlockingQueue()));    }

使用示例:

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();for (int i = 0; i < 10; i++) {final int index = i;singleThreadExecutor.execute(new Runnable() { @Overridepublic void run() {try {System.out.println(index);Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}


更多相关文章

  1. android实现字体闪烁动画的方法
  2. 浅析Android中的消息机制-解决:Only the original thread that cr
  3. 在Fragment中设置控件点击方法,执行失败。
  4. Android异步消息机制之Handler
  5. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  6. Android(安卓)之 AsyncTask 异步任务
  7. Android之Handler用法总结
  8. Android(安卓)任务和回退堆栈---启动任务
  9. Android开发之消息处理机制(一)——Handler

随机推荐

  1. 【整理】Android(安卓)animation - 基础
  2. Android(安卓)开发之v4库冲突问题解决方
  3. Android 基本按钮
  4. Android(安卓)& Java 注释模板的设置
  5. android 发送邮件到QQEmail
  6. Android Studio 编译报错:Manifest merger
  7. android的Android Please ensure that ad
  8. android平台下基于ffmpeg的swscale模块实
  9. 【转】创建和使用Android library工程
  10. Android UI 之 clipRect