设计一个线程池,这个线程池的任务有多种状态(类似短信的发送中、已发送、送达、已读等等),需要保证同一个任务的不同状态在一个线程处理,以保证有序处理。业务上比较适合使用 CachedThreadPool。
问题在于怎么保证同一个任务的不同状态在一个线程处理呢。
我想并不是线程池的问题,问题是同一任务不可并行处理。简单的处理方式就是在处理时,同任务加lock,用一个线程池。
如:
任务:class Task{ ReentrantLock lock=new ReentrantLock() }
处理:try{ task.getLock().lock(); //do something }finally{ task.getLock().unlock();}
这种简单处理有个小问题,就是如果处理时间长,状态多时,会占用线程池数量。
复杂的可能需要引入队列概念。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。