我不确定我是否正确地问了这个问题。
我有一个应用程序,可以通过另一个线程异步地将对象插入数据库。
将对象插入数据库后,新表的行ID将发回,并将该Long值存储在队列中。
如果用户取消了这个(有时是长时间运行的)摄取过程,那么我将循环访问队列以删除所有刚刚添加的对象。并不是所有的数据库对象,只有当前进程摄取的对象。
我唯一的问题是,该过程“停止”后,我开始从队列中删除具有ID的数据库对象,最后一个对象被添加到数据库和队列中。
private ConcurrentLinkedQueue<Long> listOfSuccessfullyInsertedObjects = new ConcurrentLinkedQueue<>();
.
.
.
while (!listOfSuccessfullyInsertedObjects.isEmpty()) {
Long insertedID = listOfSuccessfullyInsertedEnrollments.poll();
if (insertedID != null) {
repo.delete(insertedID);
}
}
以下是一些println
语句的典型输出:
ADDING 185 TO THE DATABASE
ADDING 186 TO THE DATABASE
CANCELING THE OPERATION ...
THERE ARE 186 ENROLLMENTS IN THE DATABASE
REMOVING 51 FROM THE DATABASE
ADDING 187 TO THE DATABASE
REMOVING 52 FROM THE DATABASE
REMOVING 53 FROM THE DATABASE
REMOVING 54 FROM THE DATABASE
REMOVING 55 FROM THE DATABASE
REMOVING 56 FROM THE DATABASE
就像我说的那样,`listOfSuccessfullyInsertedEnrollments'总是会出现一小段时间,因为运行插入程序的线程会将另外一个插入数据库。
我只能说listOfSuccessfullyInsertedEnrollments++;
总是检查一次,但是如果没有插入另外一个,或者如果插入多个,该怎么办?
因此,我可以同时更新此Queue<Long>
吗?