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