我有一个这样的线程池的场景,相信很多人都遇到过:
1,每个用户都可以添加多个任务;
2,有很多的用户和很多的任务;
3,每个用户添加的任务必须有序串行执行,即在同一时刻不能有同时执行一个用户的两个任务;
4,实时性:只要线程池线程有空闲的,那么用户提交任务后必须立即执行;尽可能提高线程的利用率。
代码比较简洁,基本满足上述要求:
public class SerialThreadExecutor {
private Executor executor;
private ConcurrentMap serialJobs = new ConcurrentHashMap();
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.put(key, job);
if (oldJob != null) {
job = oldJob;