美文网首页
Android -- 线程的池使用

Android -- 线程的池使用

作者: 小江yue | 来源:发表于2017-11-08 10:15 被阅读71次

    在网上看了很多线程池的介绍和使用,有些写的也很好,不禁点个赞,但是有些就写的比较模糊了,像我这样的新手看的有点迷糊。

    最近在项目中用到了线程池,自己做下笔记吧。


    public ThreadPoolExecutor(

                                  int corePoolSize,

                                  int maximumPoolSize,

                                  long keepAliveTime,

                                  TimeUnit unit,

                                  BlockingQueueworkQueue,

                                  ThreadFactory threadFactory,

                                  RejectedExecutionHandler handler)

    1)corePoolSize:线程池的核心线程数,一般情况下不管有没有任务都会一直在线程池中一直存活,只有在 ThreadPoolExecutor 中的方法 allowCoreThreadTimeOut(boolean value) 设置为 true 时,闲置的核心线程会存在超时机制,如果在指定时间没有新任务来时,核心线程也会被终止,而这个时间间隔由第3个属性 keepAliveTime 指定。

    2)maximumPoolSize:线程池所能容纳的最大线程数,当活动的线程数达到这个值后,后续的新任务将会被阻塞。

    3)keepAliveTime:控制线程闲置时的超时时长,超过则终止该线程。一般情况下用于非核心线程,只有在 ThreadPoolExecutor 中的方法 allowCoreThreadTimeOut(boolean value) 设置为 true时,也作用于核心线程。

    4)unit:用于指定 keepAliveTime 参数的时间单位,TimeUnit 是个 enum 枚举类型,常用的有:TimeUnit.HOURS(小时)、TimeUnit.MINUTES(分钟)、TimeUnit.SECONDS(秒) 和 TimeUnit.MILLISECONDS(毫秒)等。

    5)workQueue:线程池的任务队列,通过线程池的 execute(Runnable command) 方法会将任务 Runnable 存储在队列中。

    6)threadFactory:线程工厂,它是一个接口,用来为线程池创建新线程的。

    7)handler:当执行被阻塞时使用的处理程序。


    创建线程池:

    ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() .setNameFormat("demo-pool-%d").build();

    ExecutorService singleThreadPool = new ThreadPoolExecutor(1,3,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(1024),namedThreadFactory,new ThreadPoolExecutor.AbortPolicy());

    使用:

    singleThreadPool.execute(new Runnable() {

    @Override

    public void run() {

    耗时操作。

    }

    相关文章

      网友评论

          本文标题:Android -- 线程的池使用

          本文链接:https://www.haomeiwen.com/subject/tvlemxtx.html