我现在有多个线程,同时访问一个数据表。每个线程的任务都是一样的,就是每次取一条记录进行分析,然后将这条记录删掉。为了防止多个线程同时访问同一条记录,我的SQL是这么写的:
select x, xx, xxx from t where ROWNUM = 1 for FOR UPDATE NOWAIT。
我的问题是,如果当一个线程访问一条正在被其他线程处理的记录时,应该是报错的,如何才能让线程自动知道哪条记录没有被锁定?从而可以提高效率。
环境是weblogic + oracle
select x, xx, xxx from t where ROWNUM = 1 for FOR UPDATE NOWAIT。
我的问题是,如果当一个线程访问一条正在被其他线程处理的记录时,应该是报错的,如何才能让线程自动知道哪条记录没有被锁定?从而可以提高效率。
环境是weblogic + oracle
你觉得如何设计才好呢?
-----------------------------如果要是这样的话,我想就没必要用for FOR UPDATE NOWAIT了吧?
-----------------------------其实这种作法也很容易导致多个处理器同时访问一段数据。有可能一个处理器还没来得记上取到第N条了,其他的处理就取走了。