问题描述
现有一全局的synchronized 如下:Object lock = new Object(); synchronized(lock){ .... } 调用的都是不同的用户,现是全局synchronized ,所以用户都要排队,但是只需同一用户并发是排队调用即可。如何把全局的改成按用户synchronized 的流程。提供一下思路 问题补充:现在是通过Object ,只有用户id传入, 如果用map如何实现锁
解决方案
1、维护一个锁列表 2、根据用户id获取锁,同一个id每次获取都返回同一把锁
解决方案二:
引用1、维护一个锁列表 2、根据用户id获取锁,同一个id每次获取都返回同一把锁这个列表,需要在用户登出后,清理相应的锁,不然有可能内存泄露(主要看你的UserID设计)。
解决方案三:
同一个用户那就先判断下//获取当前操作的userUser user = context.getUsesr();User lockedUser = Application.get();//设计成全局唯一的实例-singleton//如果是同一个用户加lockif(lockedUser!=null && user.equlas(lockedUser)){ synchronized(lock){ business(); }}else if(lockedUser == null){//没有用户获取lock的时候 synchronized(lock){ lockedUser = user; business(); }}else{ business();//不需要加lock}
时间: 2024-10-21 18:12:39