/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main
( String[] args
) { Ideone app = new Ideone ();
app.doIt ();
}
private void doIt () {
System.
out.
println ( "INFO - Ideone::doIt - Running." ); BeeperControl bc = new BeeperControl ();
bc.beepRegularly (); // Ask that object to launch the background thread to tell time repeatedly.
try {
Thread.
sleep ( TimeUnit.
MINUTES.
toMillis ( 5 ) ); // Run for five minutes and then shutdown this main thread and the background thread too. bc.halt (); // Ask that object to stop the background thread.
} catch ( InterruptedException ex
) { // This main thread is either being woken-from-sleep or stopped. System.
out.
println ( "INFO - Ideone::doIt - main thread of Ideone app interrupted." ); bc.halt (); // Ask that object to stop the background thread.
}
}
class BeeperControl {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool ( 1 );
private final ZoneId zoneId = ZoneId.of ( "America/Montreal" );
//private final DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.MEDIUM ).withLocale ( this.locale );
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "hh:mm:ss a" , this.locale );
public void beepRegularly () {
// Define task to be performed.
public void run () {
try {
ZonedDateTime zdt = ZonedDateTime.now ( zoneId );
System.
out.
println ( "Now: " + zdt.
format ( formatter
) ); // Always surround your task code with a try-catch, as any uncaught exception causes the scheduler to cease silently.
System.
out.
println ( "Exception unexpectedly reached 'run' method. " + e.
getLocalizedMessage () ); }
}
};
// Start performing that task every so often.
System.
out.
println ( "INFO - BeeperControl::beepRegularly - Scheduling the executor service to run now. Runs indefinitely." ); final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate ( beeper , 0 , 5 , TimeUnit.SECONDS ); // (Runnable command, long initialDelay, long period, TimeUnit unit)
}
public void halt () {
System.
out.
println ( "INFO - BeeperControl::halt - shutting down the ScheduledExecutorService." ); scheduler.shutdown (); // Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted.
// scheduler.shutdownNow(); // Attempts to stop all actively executing tasks, halts the processing of waiting tasks, and returns a list of the tasks that were awaiting execution.
}
}
}