有一个java方法methodA();数据库中有一个字段fieldA,记录这当前的有多少个methodA()在执行;有一个常量MAX,记录允许同时最多有几个method()在执行。
在进入这个方法后,需要取得fieldA的值与MAX比较,如果fieldA小于MAX,则执行这个方法,并且fieldA要加一;否则写日志,退出方法;methodA()执行后,写日志,对fieldA字段进行减一操作,退出方法。 现在的问题是:一旦方法运行中出现异常(执行到某条语句出错,fieldA未加一,或未减一),可能会出现fieldA的值,与实际运行中的methodA()的个数出现不一致。请问各位大侠,此类问题如何解决,多谢,多谢。
在进入这个方法后,需要取得fieldA的值与MAX比较,如果fieldA小于MAX,则执行这个方法,并且fieldA要加一;否则写日志,退出方法;methodA()执行后,写日志,对fieldA字段进行减一操作,退出方法。 现在的问题是:一旦方法运行中出现异常(执行到某条语句出错,fieldA未加一,或未减一),可能会出现fieldA的值,与实际运行中的methodA()的个数出现不一致。请问各位大侠,此类问题如何解决,多谢,多谢。
}catch(){
}
finally{}
---------
捕获异常,使fieldA的值保持正确的值即可。
fieldA(当然,你用的是主流数据库,隔离级别至少是CS,游标稳定性),楼上的兄弟们
说得对,LZ在finally中必须将fieldA在一个事务写回到数据库中.是加还是减LuckBall
说得对,你在方法中做一个局部变量标志初始化成加一标志,catch中置成减一标志.
finally一判就知道了,记得在finally中将计算后fieldA写回数据库,提交事务哦.