串行执行

具有相同属性任务串行有序执行的线程池设计

一笑奈何 提交于 2021-02-13 20:22:42
我有一个这样的线程池的场景,相信很多人都遇到过: 1,每个用户都可以添加多个任务; 2,有很多的用户和很多的任务; 3,每个用户添加的任务必须有序串行执行,即在同一时刻不能有同时执行一个用户的两个任务; 4,实时性:只要线程池线程有空闲的,那么用户提交任务后必须立即执行;尽可能提高线程的利用率。 代码比较简洁,基本满足上述要求: public class SerialThreadExecutor { private Executor executor; private ConcurrentMap<Object, SequentialJob> serialJobs = new ConcurrentHashMap<Object, SequentialJob>(); public SerialThreadExecutor(Executor executor) { super(); this.executor = executor; } public void executeSerially(Object key, Runnable r) { SequentialJob job = serialJobs.get(key); if (job == null) { job = new SequentialJob(key); SequentialJob oldJob = serialJobs