解决方案 »
- J2EE 1.3+JDK 6性能为什么会比J2EE 1.3+JDK 6性能低?
- EL表达式的问题--在线等
- 谁有ExtJs 的sources文件!
- struts如何控制一个frame跳转
- hsqldb的session过期问题
- 关于经纬度和距离查询数据库获得数据,求大神啊!!!!!
- 菜鸟问题:Weblogic中如何建立数据连接池
- 请问初学J2EE,应该用什么应用程序服务器?
- 有谁用过Jakarta的James邮件服务器吗?无法启动。
- mybatis 调用mysql存储过程报错:Borrow callableStatement from pool failed
- j2ee安装问题
- weblogic中如何添加驱动:"com.microsoft.jdbc.sqlserver.SQLServerDriver"
public class LockerPool {
Map<String, String> lockers = new HashMap<String, String>(); // Value可以是任意得对象 public String getLocker(String id) {
if (!lockers.getKeys().contains(id)) {
lockers.put(id, "Lock" + id);
} return lockers.get(id);
} // 实现单例
}同步代码块
synchronized(LockerPool.getInstance().getLocker(userId)) {
// your code
}
并发的时候,可能会创建很多线程对象,每个线程对象锁自己,因此并没有实现互斥使用同一id的功能。1L方法赞同,不过map应该是static的吧。
另外,每次取用户,判断id放入map的时候,要注意锁map操作(不论是put还是get)。