Skip to content

Instantly share code, notes, and snippets.

@parthmistry
Last active November 30, 2022 12:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parthmistry/454003c10f231ce4de15a90ae553f7c9 to your computer and use it in GitHub Desktop.
Save parthmistry/454003c10f231ce4de15a90ae553f7c9 to your computer and use it in GitHub Desktop.
SimplePrefetchMultiThreadedProcessData
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class SimplePrefetchMultiThreadedProcessData {
public static void main(String[] args) throws Exception {
var semaphore = new SemaphoreWrapper(50);
try (var executor = Executors.newVirtualThreadPerTaskExecutor();
var connection = PrefetchDemoUtil.getConnection()) {
var elapsedTimeMonitor = new ElapsedTimeMonitor();
var statement = connection.createStatement();
statement.setFetchSize(100);
var resultSet = statement.executeQuery("select * from persons");
List<PersonData> personDataList = getNextBatch(resultSet);
while (!personDataList.isEmpty()) {
var futures = new ArrayList<Future<?>>();
for (var personData : personDataList) {
var future = executor.submit(() -> {
semaphore.acquire();
try {
var enrichedPersonData = PersonDataService.getEnrichedPersonData(personData);
System.out.println(enrichedPersonData.id() + " - " + enrichedPersonData.detail() + " -- " + elapsedTimeMonitor.getElapsedTimeMillis());
} finally {
semaphore.release();
}
});
futures.add(future);
}
personDataList = getNextBatch(resultSet);
for (var future : futures) {
future.get();
}
}
System.out.println("total duration: " + elapsedTimeMonitor.getElapsedTimeMillis());
}
}
public static List<PersonData> getNextBatch(ResultSet resultSet) throws SQLException {
List<PersonData> personDataList = new ArrayList<>();
for (int i = 0; i < 100 && resultSet.next(); i++) {
personDataList.add(PrefetchDemoUtil.createPersonData(resultSet));
}
return personDataList;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment