ThreadPoolExecutor线程池的使用方法

  

<强> ThreadPoolExecutor

  

ThreadPoolExecutor线程池,java提供开发框架,管理线程的创建,销毁,优化,监控等。

  

 ThreadPoolExecutor线程池的使用方法

  

有4种不同的任务队列:

  

基于数组结构的任务队列。此队列按先进先出的原则对任务进行排序。

  

基于链表结构的任务队列。此队列也是按先进先出的原则对任务进行排序。但性能比ArrayBlockingQueue高。

  

不存储元素的任务队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态。

  

具有优先级的任务队列。此队列中的元素必须能够比较。

  

<强>拒绝策略:

  

RejectedExecutionHandler(饱和策略):当线程池中的线程数大于maximumPoolSize时,线程池就不能在处理任何任务了,这时线程池会抛出异常。原因就是这个策略默认情况下是AbortPolicy:表示无法处理新任务时抛出异常。

  

1. abortpolicy:直接抛出异常。

  

2. callerrunspolicy:只用调用者所在线程来运行任务。

  

3. discardoldestpolicy:丢弃队列里最近的一个任务,并执行当前任务

  

4。DiscardPolicy:不处理,丢弃掉。
  

  

自定义:
  

  
  

ThreadPoolExecutor.AbortPolicy ()
//抛出java . util . concurrent。RejectedExecutionException异常
  ThreadPoolExecutor.CallerRunsPolicy ()
//重试添加当前的任务,他会自动重复调用execute()方法
  ThreadPoolExecutor.DiscardOldestPolicy ()
//抛弃旧的任务
  ThreadPoolExecutor.DiscardPolicy ()
//抛弃当前的任务

           私有静态类RecjectThreadHandler实现RejectedExecutionHandler   {   @Override   公共空间rejectedExecution (Runnable r, ThreadPoolExecutor执行人){      }//异常记录   私人空间doLog (Runnable r, ThreadPoolExecutor执行人)   {   System.out.println (r.toString () +“excutor失败。”+ executor.getCompletedTaskCount ());   }   }      

<>强创建线程工厂:

  

用来创建线程。

        公共类ThreadFactory CheckThreadFactory实现   {   私人字符串threadGroupName;      私人AtomicInteger数=new AtomicInteger (0);      公共CheckThreadFactory(字符串threadGroupName) {   这一点。threadGroupName=threadGroupName;   }      @Override   公共线程newThread (Runnable r)   {   线程的线程=新线程(r);   thread.setName (threadGroupName +“-”+ count.addAndGet (1));   thread.setPriority (5);   thread.setDaemon(真正);。//设置为守护线程,默认为主线程   返回线程;   }   }      

<强>线程工具类:

     /* *   * @author唐纳德   * @create 2019-09-21 21:40   */公开课CheckExcetPool   {//线程池核心线程数   私有静态int corePoolSize=Runtime.getRuntime () .availableProcessors () * 5;//最大线程数   私有静态int maximumPoolSize=corePoolSize比;255 & # 63;255:corePoolSize * 2;//线程池中除了核心线程,其他线程的最大存活时间   私有静态int keepAliveTime=60;//时间单位   私有静态TimeUnit TimeUnit=TimeUnit.SECONDS;//线程等待队列   私有静态BlockingQueue队列=new LinkedBlockingQueue ();//私有静态BlockingQueue队列=new ArrayBlockingQueue (30);//创建线程的工厂   私有静态CheckThreadFactory CheckThreadFactory=new CheckThreadFactory (“checkGroup”);//拒绝策略当提交任务数超过maxmumPoolSize +工作队列之和时,//*即当提交第41个任务时(前面线程都没有执行完,此测试方法中用睡眠(100)),//*任务会交给RejectedExecutionHandler来处理/*处理程序的拒绝策略:   有四种:第一种AbortPolicy:不执行新任务,直接抛出异常,提示线程池已满   第二种DisCardPolicy:不执行新任务,也不抛出异常   第三种DisCardOldSetPolicy:将消息队列中的第一个任务替换为当前新进来的任务执行   第四种CallerRunsPolicy:直接调用执行来执行当前任务*/私有静态ThreadPoolExecutor ThreadPoolExecutor=new ThreadPoolExecutor (   corePoolSize,   maximumPoolSize,   keepAliveTime,   timeUnit,   队列,   checkThreadFactory   );      公共静态空提交(Runnable Runnable)   {   System.out.println (corePoolSize +“::”+ queue.size ());   threadPoolExecutor.submit(可运行);   }   公共静态& lt; T>未来的提交(Callable

ThreadPoolExecutor线程池的使用方法