请教比较复杂队列使用技巧

10-05-25 liujian1979

简述一下场景是这样:

我使用LinkedBlockingQueue队列把来自网关的数据保存,并用take()取出数据处理下发。

LinkedBlockingQueue里面大致参数如下:

手机号码,命令类型,当前任务,任务数组,。

手机端需要把响应发上来,我放到ConcurrentHashMap().因为LinkedBlockingQueue里面take()数据需要查ConcurrentHashMap()来判处做出不同处理流程。 但ConcurrentHashMap里数据需要取出改对象状态,但有可能ConcurrentHashMap取出修改状态时候,另一个线程又往里加入相同key值记录,那怎么保证ConcurrentHashMap取出数据修改状态时候,其他线程知道有这条记录并知道该记录是锁定状态呢?这样另外线程就不会再添加了?

    

banq
2010-05-26 08:17

2010年05月25日 11:16 "liujian1979"的内容
怎么保证ConcurrentHashMap取出数据修改状态时候,其他线程知道有这条记录并知道该记录是锁定状态呢 ...

将这个数据用对象封装起来,增加一个修改方法,在这个方法上同步锁。