1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. public class TokenBatchProcessor {
  6. private final AuthenticationTokenProcessor processor;
  7. private final int batchSize;
  8. private final ExecutorService executorService;
  9. public TokenBatchProcessor(AuthenticationTokenProcessor processor, int batchSize) {
  10. this.processor = processor;
  11. this.batchSize = batchSize;
  12. this.executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
  13. }
  14. public List<String> processTokens(List<String> tokens) {
  15. List<String> results = new ArrayList<>();
  16. int tokensProcessed = 0;
  17. for (int i = 0; i < tokens.size(); i += batchSize) {
  18. List<String> batch = tokens.subList(i, Math.min(i + batchSize, tokens.size()));
  19. executorService.submit(() -> {
  20. try {
  21. List<String> batchResults = processor.processBatch(batch);
  22. results.addAll(batchResults);
  23. } catch (Exception e) {
  24. // Handle exceptions appropriately. Log, retry, etc.
  25. System.err.println("Error processing batch: " + e.getMessage());
  26. }
  27. });
  28. tokensProcessed += batchSize;
  29. }
  30. executorService.shutdown();
  31. try {
  32. if (!executorService.awaitTermination(60, java.util.concurrent.TimeUnit.SECONDS)) {
  33. System.err.println("ExecutorService did not terminate in time.");
  34. }
  35. } catch (InterruptedException e) {
  36. System.err.println("ExecutorService termination interrupted.");
  37. }
  38. return results;
  39. }
  40. public interface AuthenticationTokenProcessor {
  41. List<String> processBatch(List<String> tokens) throws Exception;
  42. }
  43. public static void main(String[] args) {
  44. // Example Usage (replace with your actual processor and tokens)
  45. AuthenticationTokenProcessor exampleProcessor = tokens -> {
  46. List<String> results = new ArrayList<>();
  47. for (String token : tokens) {
  48. // Simulate token processing
  49. try {
  50. Thread.sleep(100); // Simulate some work
  51. if (token.equals("invalid_token")) {
  52. throw new Exception("Invalid token encountered");
  53. }
  54. results.add("Result for " + token);
  55. } catch (Exception e) {
  56. results.add("Error processing " + token + ": " + e.getMessage());
  57. }
  58. }
  59. return results;
  60. };
  61. TokenBatchProcessor processor = new TokenBatchProcessor(exampleProcessor, 5);
  62. List<String> tokens = List.of("token1", "token2", "token3", "token4", "token5", "token6", "token7", "token8", "token9", "invalid_token");
  63. List<String> results = processor.processTokens(tokens);
  64. System.out.println(results);
  65. }
  66. }

Add your comment