比如一个客户表有id、personId(获得客户的人的id),有很多人做获取同一个客户操作,但是只有最先操作的人才可以获得要怎么做呢?关键是性能问题?我想到的只是同步锁定操作的方法,但是并不可行,锁定了方法后不同的客户id也不能同时操作了,各位请帮忙看看!谢谢!
[b]问题补充:[/b]
在代码里加一个同步的方法,也是我想到的,想问题下,如果不同的2人同时获取不同的客户,他们用的代码是不是同一个呢?那样的话,他们就是不能同时操作?
关于数据同步和并发(java)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- iteye_14762 2009-04-20 10:28关注
你的想法是可行的,只是对同一个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]
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 根据以下文字信息,做EA模型图
- ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
- ¥15 vscode程序一直报同样的错,如何解决?
- ¥15 关于使用unity中遇到的问题
- ¥15 开放世界如何写线性关卡的用例(类似原神)
- ¥15 关于并联谐振电磁感应加热
- ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
- ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
- ¥60 关机时蓝屏并显示KMODE_EXCEPTION_NOT_HANDLED,怎么修?
- ¥66 如何制作支付宝扫码跳转到发红包界面