我有方法A和方法B两种方法。方法A负责向用户发送账单,方法B负责更新数据库。方法B使用PreparedStatement。 方法A一次由不同的并发线程运行。例如
Thread 1- Method A
Thread 2- Method A
Thread 3- Method A
方法A调用方法B来更新数据库,以便在结算时失败或成功。就像
一样void A()
{
send billing sms
if (successful)
{
//update database with successful status
status='success'
}
if unsuccessful{
status='unsuccess'
}
method B(status, connection);
}
void B(Status s, Connection con)
{
PreparedStatement codes.. for update
}
因为,方法A一次由不同的并发线程调用,如何在方法B中实现PreparedStatement Batch函数,说我想一次更新50个事务而不是逐个更新。我想在方法A上创建一些计数器(但是因为并发线程运行 这个方法,这可能吗?)或方法B(但是当由不同的并发线程调用时,计数器变量将再次为0,所以这可能吗?)或者使全局计数器类使得每次方法B()是调用此计数器增加,一旦达到50,则执行批量更新(不知道)..
请指教!!
答案 0 :(得分:1)
说实话,我根本不会这样做。
如果服务器在批处理中有挂起的更新时关闭,那么您的方法也很有可能完全错过数据库更新。
更简洁的方法是在一次交易中处理多个账单。根据用例,这可能是合适的(批处理),也可能完全不切实际(如果是用户驱动的操作)。
答案 1 :(得分:0)
我会这样做:
让方法A做任何他想做的事,但是将它存储到本地缓冲区中,更改,arrayList,Vector,无论你需要什么。在某一点 - 在java端存储更改应该是同步块或方法。 在synchronized块中,您将增加更换器的计数器,或检查您的集合大小。如果大于预定义值: