rendered paste bodyimport java.util.ArrayList;import java.util.Scanner;public class Scheduler { public static void main (String[] args) { TQueue tq = new TQueue(); EventGenerator eg = new EventGenerator(tq); EventManager em = new EventManager(tq); eg.start(); em.start(); } // main} // Schedulerclass EventManager extends Thread { private TQueue tq; private int clock; public EventManager (TQueue tq0) { tq = tq0; clock = 0; } // EventManager public void run () { Evt ev; while (clock < 1000) { while ((ev = tq.getOlderPastEvent(clock)) != null) System.out.println("Time="+clock+"\nEvent:\n"+ev); try { sleep (5000); } catch (InterruptedException e) { System.out.println(e); } clock++; } // while } // run} // EventManagerclass EventGenerator extends Thread { private TQueue tq; public EventGenerator (TQueue tq0) { tq = tq0; } // EventGenerator public void run () { int time; String description; //tq.insertEvent(new Evt(2000, "Start")); while (true) { Scanner in = new Scanner(System.in); System.out.println("Inserire l'istante di tempo.\n"); time = in.nextInt(); System.out.println("Inserire la descrizione.\n"); in.nextLine(); description = new String(in.nextLine()); tq.insertEvent(new Evt(time,description)); } // while } // run} // EventGeneratorclass TQueue { private ArrayList<Evt> queue; public TQueue () { queue = new ArrayList<Evt>(); } // TQueue public synchronized void insertEvent (Evt ev) { queue.add(ev); return; } // insert public synchronized Evt getOlderPastEvent (int time) { int iOlder = 0; for (int i = 1; i < queue.size(); i++) if (queue.get(i).getTime() < queue.get(iOlder).getTime()) iOlder = i; if (queue.size() != 0 && queue.get(iOlder).getTime() <= time) return queue.remove(iOlder); else return null; } // getOlderEventIndex } // TQueueclass Evt { private int time; private String description; public Evt (int time0, String description0) { time = time0; description = description0; } // Evt public String getDescription () { return description; } // getDescription public int getTime () { return time; } // getTime public String toString () { return getClass().getName()+"[time="+time+", description="+description+"]"; } // toString} // Evt