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条)

报告相同问题?

悬赏问题

  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果