当前位置: 代码迷 >> Java Web开发 >> 关于java行列处理请求的设计
  详细解决方案

关于java行列处理请求的设计

热度:4165   发布时间:2013-02-25 21:10:52.0
关于java队列处理请求的设计
最近需要开发一个项目,程序设计用到生产者与消费者得思想。如下:
有两个生产者,分别是product_a和product_b
一个消费者,consumer

如今的需求是如果product_a有需要处理的请求,consumer必须先执行处理,无论product_b有没有请求过来。
开始我个人的想法有两个
1、在consumer中放置两个list集合,分别装载两个生产者得请求,只是将处理生产者a的请求的线程优先级设置为最大,而生产者b的用默认的优先级或者是最小的优先级
2、在consumer中用LinkedList来实现,生产者a的请求这addfirst(),b的则addLast(),处理请求的时候,从Linklist的
第一个元素开始处理,这样就保证了无论什么情况下,都会先处理生产者a的请求

当然了,我上面的两个想法我自己准备用第二种实现,但是由于我还是菜鸟的开发人员,所以在这里向各位前辈请教了,想听听各位的设计思想。小弟不胜感激


------解决方案--------------------------------------------------------
听你这么描述,我感觉用代理,做个拦截好像就可以了。
------解决方案--------------------------------------------------------
看到这个需求我的第一反应就是定义两个集合ListA,ListB,分别接受ProductA,ProductB的请求,先把处理ListA里面的请求。楼主你想通过A往前面压请求B往后面压请求,是个很好的思路。不过实现起来可能有点问题。
------解决方案--------------------------------------------------------
首先想问下,如果c在执行pb请求的过程中,pa请求来了,c要中断pb请求处理立即响应pa请求吗?
其次,方法2中,如果pa的请求来了,c还没来得及处理,pa又来了个请求,如果是addfirst的话,第二个请求会先被处理,pa的请求顺序没有什么限定吗?

------解决方案--------------------------------------------------------
探讨

首先想问下,如果c在执行pb请求的过程中,pa请求来了,c要中断pb请求处理立即响应pa请求吗?
其次,方法2中,如果pa的请求来了,c还没来得及处理,pa又来了个请求,如果是addfirst的话,第二个请求会先被处理,pa的请求顺序没有什么限定吗?

------解决方案--------------------------------------------------------
用两个队列嘛
消费者A添加到队列1 消费者B添加到队列2
每次处理请求的时候先从队列1的第一笔开始取,如果队列1空了再取队列2
这样满足了你处理先处理消费者A的要求

其次也保证了消费者A和消费者B的请求处理顺序是正确的,先进来先处理

所以你的第一种方法是合理的,即使是多线程处理也是没有问题的

第二种做法的话就麻烦了,没必要把两种请求强行放到一个队列里,程序维护的效率低而且不容易区分,如果你要syso消费者A和B的请求时,就得循环挑选了~~
并且第二种方法的addfirst和addlast的做法实不可取的,如果消费者A连续发送N个请求,但是你程序处理请求的能力达不到发送请求的速率,那会导致消费者A后进来的请求先被执行了,这是不对的!~
  相关解决方案