iteye_2555 2009-04-20 10:02
浏览 229
已采纳

关于数据同步和并发(java)

比如一个客户表有id、personId(获得客户的人的id),有很多人做获取同一个客户操作,但是只有最先操作的人才可以获得要怎么做呢?关键是性能问题?我想到的只是同步锁定操作的方法,但是并不可行,锁定了方法后不同的客户id也不能同时操作了,各位请帮忙看看!谢谢!
[b]问题补充:[/b]
在代码里加一个同步的方法,也是我想到的,想问题下,如果不同的2人同时获取不同的客户,他们用的代码是不是同一个呢?那样的话,他们就是不能同时操作?

  • 写回答

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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?