Map locks = new Map();
List lockKeys = new List();
for (int number : 1 - 10000) {
Object lockKey = new Object();
lockKeys.add(lockKey);
locks.put(lockKey, new Object());
}
public void doSomeThing(String uid) {
Object lockKey = lockKeys.get(uid.hash() % lockKeys.size());
Object lock = locks.get(lockKey);
synchronized(lock) {
// do something
}
}
public class LockPool {
//用户map
private static ConcurrentHashMap<String,Object> userMap=new ConcurrentHashMap<String,Object>();
//用户金额map
private static ConcurrentHashMap<String,Integer> moneyMap=new ConcurrentHashMap<String,Integer>();
public static void main(String[] args) {
LockPool lockPool=new LockPool();
ExecutorService service = Executors.newCachedThreadPool();
service.execute(lockPool.new Boss("u2"));
service.execute(lockPool.new Boss("u1"));
service.execute(lockPool.new Boss("u1"));
service.execute(lockPool.new Boss("u3"));
service.execute(lockPool.new Boss("u2"));
service.execute(lockPool.new Boss("u2"));
service.execute(lockPool.new Boss("u3"));
service.execute(lockPool.new Boss("u2"));
service.execute(lockPool.new Boss("u2"));
service.execute(lockPool.new Boss("u4"));
service.execute(lockPool.new Boss("u2"));
service.shutdown();
}
class Boss implements Runnable{
private String userId;
Boss(String userId){
this.userId=userId;
}
@Override
public void run() {
addMoney(userId);
}
}
public static void addMoney(String userId){
Object obj=userMap.get(userId);
if(obj==null){
obj=new Object();
userMap.put(userId,obj);
}
//obj是与具体某个用户绑定,这里应用了synchronized(obj)的小技巧,而不是同步当前整个对象
synchronized (obj) {
try {
System.out.println("-------sleep4s--------"+userId);
Thread.sleep(4000);
System.out.println("-------awake----------"+userId);
}
catch (InterruptedException e) {
e.printStackTrace();
}
if(moneyMap.get(userId)==null){
moneyMap.put(userId,1);
} else{
moneyMap.put(userId, moneyMap.get(userId)+1);
}
System.out.println(userId+"-------moneny----------"+moneyMap.get(userId));
}
}
}
-------sleep4s--------u2 -------sleep4s--------u1 -------sleep4s--------u3 -------sleep4s--------u4 -------awake----------u2 -------awake----------u3 -------awake----------u1 u2-------moneny----------1 u1-------moneny----------1 -------sleep4s--------u1 u3-------moneny----------1 -------sleep4s--------u2 -------sleep4s--------u3 -------awake----------u4 u4-------moneny----------1 -------awake----------u1 u1-------moneny----------2 -------awake----------u3 u3-------moneny----------2 -------awake----------u2 u2-------moneny----------2 -------sleep4s--------u2 -------awake----------u2 u2-------moneny----------3 -------sleep4s--------u2 -------awake----------u2 u2-------moneny----------4 -------sleep4s--------u2 -------awake----------u2 u2-------moneny----------5 -------sleep4s--------u2 -------awake----------u2 u2-------moneny----------6
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有