Skip to content

Instantly share code, notes, and snippets.

@parthmistry
Created November 27, 2022 03:42
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/c8fec997d1fbb1815428fc33fdb37edd to your computer and use it in GitHub Desktop.
Save parthmistry/c8fec997d1fbb1815428fc33fdb37edd to your computer and use it in GitHub Desktop.
BasicMultiThreadedProcessData
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
public class BasicMultiThreadedProcessData {
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 callables = personDataList.stream().map(personData ->
(Callable<Void>) () -> {
semaphore.acquire();
try {
var enrichedPersonData = PersonDataService.getEnrichedPersonData(personData);
System.out.println(enrichedPersonData.id() + " - " + enrichedPersonData.detail() + " -- " + elapsedTimeMonitor.getElapsedTimeMillis());
} finally {
semaphore.release();
}
return null;
}
).toList();
executor.invokeAll(callables);
personDataList = getNextBatch(resultSet);
}
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