关于synchronized 全局转分部

现有一全局的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设计)。