@Override
		public void load(TestDataKeyModel testModel, Accumulator<Long> accumulator,
				TaskMonitor monitor) throws Exception {

			// somewhat arbitrary; enough for tests to have repeated updates
			int rows = TestDataKeyModel.ROWCOUNT * 2;
			int total = 0;
			int n = 3;
			for (int i = 0; i < n; i++) {
				if (monitor.isCancelled()) {
					return;
				}
				accumulator.add((long) i);
				total++;
			}

			waitForInitialLoadLatch.countDown();

			while (total < rows) {
				waitForUpdateSemaphore.tryAcquire(2, TimeUnit.SECONDS);

				accumulator.add((long) total++);
				accumulator.add((long) total++);
				accumulator.add((long) total++);

				waitForUpdateFinishedSemaphore.release();
			}
		}
A policy that will initially load some of its data, then wait for the client to 
signal to proceed.  Then, it will load another chunk of data, waiting again.
Ghidra/Framework/Docking/src/test.slow/java/docking/widgets/table/threaded/IncrementalThreadedTableTest.java