public static void main(String[] args) throws InterruptedException { Consumer[] consumers = new Consumer[NUM_OF_CONSUMERS]; Warehouse warehouse = Warehouse.getInstance(); Store[] stores = Store.getAllInstances(); for (int i = 0; i < NUM_OF_CONSUMERS; i++) { consumers[i] = new Consumer(); new Thread(consumers[i]).start(); } for (Store s : stores) { new Thread(s).start(); } Thread printingThread = new Thread( () -> { try { while (true) { Thread.sleep(1000); int consumersHave = 0; for (Consumer consumer : consumers) { consumersHave += consumer.getNumOfEatenItems(); } int storesHave = 0; for (Store s : stores) { storesHave += s.getCurrentNumOfItems(); } System.out.print("Warehouse = " + warehouse.getCurrentNumOfItems()); System.out.print(" Stores = " + storesHave); System.out.println(" Consumer have = " + consumersHave); System.out.println( "Number of items = " + (consumersHave + storesHave + warehouse.getCurrentNumOfItems())); } } catch (InterruptedException e) { e.printStackTrace(); } }); printingThread.start(); printingThread.join(); }