多个线程同时对一个客户交易表的数据分析, 将客户基本信息的分析数据放在另一个表中, 只要客户在当天内有交易,就把客户的一些信息写入,并且同一客户同一天只有记载一次(客户号+当天日期 为唯一索引), 这样就存在一个并发的问题, 多个线程可能同时插入同一个客户的信息. 怎样判断遇到这种情况时, 让程序继续执行下去.如果根据SQLException中数据库返回的错误代码判断, 会不会有其它的不能预料到的问题.

解决方案 »

  1.   

    加个线程锁吧java女生群:15649786,欢迎女性JAVA程序员加入
      

  2.   

    现在是维护以前的class, 客户提出需要提高效率. 目前的方案是在原来的代码中 增加一个线程, 把原来的代码的部分功能转移到这个线程中执行, 枷锁怎么处理?
      

  3.   

    但此class是一个分析功能, 如果把那张表给锁上, 那每次只能一个线程操作,这样不能提高效率了. 现在是想多个线程同时对这张表操作, 只是遇到已经增加了客户时, 才不增加这条记录.
      

  4.   

    如果你是用JDBC访问的数据库
    当你要对数据进行修改时可以在statement中写字符串参数为:"select * from table_name forupdate"这个是悲观锁,你不commit其他线程是不能执行更新操作的Hibernate在对数据进行更新时也有相关的API好象是get()中有一个参数可以设置锁的性质,从而达到你要效果
      

  5.   

    最简单的办法是把用户数据分组。比如100条数据,前一个线程处理前50条,后一个线程处理后50条。我觉得加锁不太好,极其影响效率。"select   *   from   table_name   forupdate" 这种办法会导致一个线程处于等待锁的状态,当前一个线程释放锁之后后一个线程仍然会读取这条数据并进行分析和后续的update工作。