import java.util.concurrent.CyclicBarrier; import java.util.concurrent.BrokenBarrierException; public class DataProcessingExample { private static final int NUM_PARTS = 4; private static int[] data = new int[1000]; // A large data collection private static int[] results = new int[NUM_PARTS]; // Partial results // Task for processing a part of the data static class DataProcessor implements Runnable { private int part; private CyclicBarrier barrier; DataProcessor(int part, CyclicBarrier barrier) { this.part = part; this.barrier = barrier; } @Override public void run() { // Processing a subset of the data System.out.println("Processing part: " + part); int sum = 0; for (int i = part * 250; i < (part + 1) * 250; i++) { sum += data[i]; // Simple processing (e.g., summing values) } results[part] = sum; try { // Wait for other threads to reach this point barrier.await(); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } } } public static void main(String[] args) { // Initializing data for (int i = 0; i < data.length; i++) { data[i] = i; } CyclicBarrier barrier = new CyclicBarrier(NUM_PARTS, () -> { // Combining results after all threads have processed their part int totalSum = 0; for (int sum : results) { totalSum += sum; } System.out.println("Total sum: " + totalSum); }); for (int i = 0; i < NUM_PARTS; i++) { new Thread(new DataProcessor(i, barrier)).start(); } } }