in src/main/java/com/univocity/parsers/common/input/concurrent/ConcurrentCharLoader.java [114:166]
public synchronized CharBucket nextBucket() {
if (activeExecution == null && !finished) {
int length = -1;
try {
length = readBucket();
if (length >= 0 && length <= 4) {
length = readBucket();
}
} catch (BomInput.BytesProcessedNotification e) {
throw e;
} catch (Exception e) {
setError(e);
}
if(length != -1) {
activeExecution = new Thread(this, "unVocity-parsers input reading thread");
activeExecution.start();
} else {
finished = true;
try {
buckets.put(end);
} catch(InterruptedException e){
Thread.currentThread().interrupt();
} finally {
stopReading();
}
}
}
try {
if (finished) {
if (buckets.size() <= 1) {
return end;
}
}
if (currentBucket != null) {
instances.release(currentBucket);
}
Object element = buckets.take();
if (element == end) {
finished = true;
return end;
} else {
currentBucket = (Entry<CharBucket>) element;
}
return currentBucket.get();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
finished = true;
return end;
}
}