美文网首页
ThreadPoolExecutor 使用方式

ThreadPoolExecutor 使用方式

作者: 代码人生____ | 来源:发表于2018-08-17 20:47 被阅读0次

    线程池使用:

    ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()

    .setNameFormat("pool-%d").build();

    ThreadPoolExecutor execServiceChores = new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime, TimeUnit.MILLISECONDS,new SynchronousQueue(),

     namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());

    setNameFormat("名字"):给线程池设置名字

    corePoolSize:核心线程数

    maximumPoolSize:最大线程数

    keepAliveTime:当线程池里面线程没有任务保持活跃时间

    TimeUnit:时间单位

    SynchronousQueue:线程池使用队列类型

    ArrayBlockingQueue数组形式存储容量固定

    SynchronousQueue没有容量

    LinkedBlockingQueue链表形式存储容量固定

    PriorityBlockingQueue二叉堆实现的优先级阻塞队列

    ThreadPoolExecutor.CallerRunsPolicy():线程池使用策略

    AbortPolicy当线程池任务数量达到上限终止添加任务

    CallerRunsPolicy重试添加当前的任务,他会自动重复调用execute()方法 

    DiscardOldestPolicy抛弃旧的任务 

    DiscardPolicy抛弃当前的任务 

    线程池关闭

    pool.shutdown(); 

    try { 

    if (!pool.awaitTermination(10, TimeUnit.SECONDS)) {

    pool.shutdownNow(); // Cancel currently executing tasks 

    if (!pool.awaitTermination(10, TimeUnit.SECONDS)) {

    System.err.println("Pool did not terminate");

    }

    }

    } catch (InterruptedException ie) {

    pool.shutdownNow();

    Thread.currentThread().interrupt();

    }

    线程池定时任务使用

    使用ScheduledExecutorService替代Timer,应为Timer执行任务中如果出现异常任务不执行,ScheduledExecutorService出现异常任务继续执行

    ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

    scheduler.scheduleAtFixedRate(() -> {"执行任务"},

    initialDelay,period,unit);

    )

    initialDelay等待多长时间执行

    period执行任务周期

    unit时间单位

    相关文章

      网友评论

          本文标题:ThreadPoolExecutor 使用方式

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