多线程并发求教

码之魂 2012-11-12 05:09:15
例:
A转账给B,
C转账给B.
........
入库操作.

1.需要效率,不能把没有冲突的人给锁住,比如:e转账给f,对于A->b做完后才能C->B.
2.暂时想法是把正在进行的人员放入到一个静态的map中(成对放入,比如A,B),
每次先检查要处理的人是否有其中一个正在处理,如果正在处理,那么循环等.如果正在处理的人,处理完了,那么就从map中移除出去,后来的C->B就放入....依次循环..

但如果整的并发了那么放入map的时候可能出现并发,但我不能去锁方法,锁方法就违背了第一个.
其实也不知放的时候,判断map是否存在该人,放入时,删除时,都存在并发的问题.

谁有并发的处理经验?求教.

以这个例子再次说明下:
A->B
C->B
E->F
期望,如果三对同时做的话,那么a,b和e,f先处理,c,b等待.

但愿大家明白我意思.
...全文
281 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huaye 2012-11-16
  • 打赏
  • 举报
回复
我想了下,因map操作有并发,所以采用ConcurrentHashMap来存储。 比如A->B C->B将B作为key,value应该为ConcurrentLinkedQueue队列存储A C A执行完就将队列中的A去掉,并执行C,即队列中第一个。
helloqiner 2012-11-14
  • 打赏
  • 举报
回复
如果只是数据库操作,可以考虑采用存储过程。很多数据库都支持行锁及乐观锁,可以很大程度上避免锁死情况。 如果单纯程序处理的话,可以采用jdk并发包中的 ConcurrentLinkedQueue
码之魂 2012-11-12
  • 打赏
  • 举报
回复
java的.
码之魂 2012-11-12
  • 打赏
  • 举报
回复
web程序.

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧