import java.util.LinkedList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Semaphore; public class Main { private static final List productCodeDetailsList = new CopyOnWriteArrayList<>(); private static final Semaphore semaphore = new Semaphore(1); public static void main(String[] args) { for (int i = 0; i < 1000; i++) { int finalI = i; new Thread(() -> { try { semaphore.acquire(); productCodeDetailsList.add(finalI); if (finalI % 100 == 0) { productCodeDetailsList.clear(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { semaphore.release(); } }).start(); } try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(productCodeDetailsList); System.out.println(productCodeDetailsList.size()); } }