运维在升级,无聊写博客

  最近在实现消息通知平台上面,对于针对不同的通知需要设置优先级,实现当通知队列堵塞的时候可以有限推送高优先级的消息。为了保证通知队列的高效并发,通知队列的消费端是采用多线程并发处理的,因此需要实现一个可以实现优先级的多线程处理逻辑:

对于ThreadPollExecutor来说,

public PriorityThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)

如果实现优先级线程池需要注意一下三点

1.线程池中新加入的线程会放到workQueue中,如果是优先级队列,那么该参数必须要是PriorityBlockingQueue。

2.PriorityBlockingQueue容器中最终存储的是FutureTask对象,改对象是newTaskFor实例化的,因此需要实现继承自Comparable的FutureTask实现【例如:ComparableFutureTask】

3.ComparableFutureTask中实现比较线程的优先级,需要将实例化具有优先级的线程对象【例如:PriorityTask】

 

如上根据上面的点,可参考的代码如下

【PriorityTask】

public abstract class PriorityTask implements Runnable, Comparable<PriorityTask> {

    private Integer prority;



    public PriorityTask(Integer prority) {
        this.prority = prority;
    }

    @Override
    public abstract void run();
    

    @Override
    public int compareTo(PriorityTask o) {

        return prority.compareTo(o.prority);
    }
}
View Code

相关文章:

  • 2021-10-28
  • 2021-08-14
  • 2021-11-07
  • 2021-08-01
  • 2021-07-22
  • 2021-11-17
猜你喜欢
  • 2021-11-03
  • 2022-12-23
  • 2022-12-23
  • 2021-07-06
  • 2021-07-12
相关资源
相似解决方案