Use ThreadIterationStrategy

The ThreadIterationStrategy idea is for each thread to only get one piece ThreadWorkUnit at a time. Regardless of volume, threads start executing almost immediately - unlike other strategies where lots of data can be selected in getJobWork(), leading to out-of-memory conditions if there is too much work.

Here are some technical highlights about how the ThreadIterationStrategy works: