比如一个客户表有id、personId(获得客户的人的id),有很多人做获取同一个客户操作,但是只有最先操作的人才可以获得要怎么做呢?关键是性能问题?我想到的只是同步锁定操作的方法,但是并不可行,锁定了方法后不同的客户id也不能同时操作了,各位请帮忙看看!谢谢!
[b]问题补充:[/b]
在代码里加一个同步的方法,也是我想到的,想问题下,如果不同的2人同时获取不同的客户,他们用的代码是不是同一个呢?那样的话,他们就是不能同时操作?
你的想法是可行的,只是对同一个Id进行锁就可以了,看了下面的代码就明白了:
[code="java"]
public class Syn {
private static final int DEFAULT_LOCK_CLEAR_LIMIT = 1000;
private int lockClearLimit = DEFAULT_LOCK_CLEAR_LIMIT;
private final Map<Object, Object> LOCKS = new HashMap<Object, Object>();
/**
* 如果是同一个id, 拿到的锁就是同一个,不同的就拿到不同的锁,所以不同的id可以同时操作的
*
* @param id
* @throws Exception
*/
public void syntest(String id) throws Exception {
Object lock;
synchronized (LOCKS) {
if (LOCKS.size() > lockClearLimit) {
LOCKS.clear();
}
lock = LOCKS.get(id);
if (lock == null) {
lock = new Object();
LOCKS.put(id, lock);
}
}
synchronized (lock) {
// 做你要做的在这里...
}
}
}
[/code]
还是别在数据库端加锁,不好维护,你可以在代码里加一个同步的方法不就行了吗?然后用这个方法去访问数据库