我有一个方法,可以向队列写入大约700万个条目。我在多个线程中逐个读取条目,并将其写入数据库。以下是执行此操作的类的代码段。 同样,这是在多线程环境中执行的。
private class WriteRunner<T> implements Callable<Long> {
// member variables
public WriteRunner(ConcurrentLinkedQueue<T> elementsQueue,...)
//constructor
}
@Override
public Long call() throws Exception {
while (!elementsQueue.isEmpty()) {
int failures = 0;
T t = elementsQueue.poll();
while (true) {
try {
// write to DB
break;
} catch (Exception e) {
//Log error
//Wait for 10 seconds and retry
Thread.sleep(10000);
if (++failures > 10) {
throw new Exception(
String.format("[TID: %d] Connection repeatedly failed.", threadId));
}
}
}
}
//log more stuff
return (long)total;
}
}
以下是我如何调用方法
for (int i = 0; i < N_THREADS; i++) {
completionService.submit(
new WriteRunner<T>(elementsQueue ,...));
}
long total = 0;
for (int i = 0; i < N_THREADS; i++) {
total += completionService.take().get();
}
我错过了很多条目,因为有多少例外。 我的想法是,重试同样的&#39; t&#39;是最新民意调查的元素。
例外有什么问题?