Java Coding Challenge: Task Scheduler - Programming (2) - Nairaland
Nairaland Forum › Science/Technology › Programming › Java Coding Challenge: Task Scheduler (8754 Views)
| Re: Java Coding Challenge: Task Scheduler by candylips(op): 10:09am On Aug 08, 2011 |
My solution ExponentialTimer.java [color=#CCCCCC]package[/color] challenge; [color=#CCCCCC]import[/color] java.util.Timer; [color=#CCCCCC]import[/color] java.util.TimerTask; [color=#808080]/** * Implements an exponential timer (recursive definition) with a steady state. * * */[/color] [color=#0257ae]public[/color] [color=#0257ae]class[/color] ExponentialTimer { [color=#808080]/* * By default, this exponential timer reaches steady state at 900 seconds. (15 mins) */[/color] [color=#0257ae]public[/color] [color=#0257ae]static[/color] [color=#0257ae]final[/color] [color=#0257ae]int[/color] DEFAULT_STEADY_STATE_SECONDS = [color=#b0948a]900[/color]; [color=#0257ae]private[/color] [color=#0257ae]int[/color] steadyStateInSeconds; [color=#0257ae]private[/color] Timer timer; [color=#0257ae]public[/color] ExponentialTimer() { steadyStateInSeconds = DEFAULT_STEADY_STATE_SECONDS; } [color=#0257ae]public[/color] ExponentialTimer([color=#0257ae]int[/color] seconds) { steadyStateInSeconds = seconds; } [color=#0257ae]public[/color] [color=#0257ae]void[/color] invoke(Task task) { scheduleIn(task, [color=#b0948a]1[/color], [color=#b0948a]1[/color]); } [color=#808080]/** * Schedules the timer to invoke the task in the specified delay. * * @param task * @param delay * @param retryCount */[/color] [color=#0257ae]void[/color] scheduleIn(Task task, [color=#0257ae]long[/color] delay, [color=#0257ae]int[/color] retryCount) { timer = [color=#FF9D00]new[/color] Timer([color=#b0948a]false[/color]); timer.schedule([color=#FF9D00]new[/color] InvokeTaskTimerTask(task, delay, retryCount), delay * [color=#b0948a]1000[/color]); } [color=#808080]/** * If specified, this timer reaches steady state in so many seconds. * * @param steadyStateInSeconds * the steadyStateInSeconds to set */[/color] [color=#0257ae]public[/color] [color=#0257ae]void[/color] setSteadyStateInSeconds([color=#0257ae]int[/color] steadyStateInSeconds) { [color=#FF9D00]this[/color].steadyStateInSeconds = steadyStateInSeconds; } [color=#808080]/** * Responsible for the retry logic. */[/color] [color=#0257ae]class[/color] InvokeTaskTimerTask [color=#0257ae]extends[/color] TimerTask { [color=#0257ae]private[/color] [color=#0257ae]final[/color] Task task; [color=#0257ae]private[/color] [color=#0257ae]final[/color] [color=#0257ae]long[/color] currentDelay; [color=#0257ae]private[/color] [color=#0257ae]final[/color] [color=#0257ae]int[/color] retryCount; [color=#808080]/** * @param task */[/color] [color=#0257ae]public[/color] InvokeTaskTimerTask(Task task, [color=#0257ae]long[/color] currentDelay, [color=#0257ae]int[/color] retryCount) { [color=#FF9D00]this[/color].task = task; [color=#FF9D00]this[/color].currentDelay = currentDelay; [color=#FF9D00]this[/color].retryCount = retryCount; } [color=#808080]/** * Invoked by the scheduled timer. */[/color] @Override [color=#0257ae]public[/color] [color=#0257ae]void[/color] run() { System.out.println([color=#FF0000]"[/color][color=#FF0000]E[/color][color=#FF0000]x[/color][color=#FF0000]e[/color][color=#FF0000]c[/color][color=#FF0000]u[/color][color=#FF0000]t[/color][color=#FF0000]i[/color][color=#FF0000]n[/color][color=#FF0000]g[/color][color=#FF0000] [/color][color=#FF0000]t[/color][color=#FF0000]a[/color][color=#FF0000]s[/color][color=#FF0000]k[/color][color=#FF0000].[/color][color=#FF0000] [/color][color=#FF0000].[/color][color=#FF0000] [/color][color=#FF0000].[/color][color=#FF0000] [/color][color=#FF0000]#[/color][color=#FF0000]"[/color] + retryCount); [color=#FF9D00]try[/color] { task.execute(); timer.cancel(); } [color=#FF9D00]catch[/color] (Exception e) { System.out.println([color=#FF0000]"[/color][color=#FF0000]E[/color][color=#FF0000]r[/color][color=#FF0000]r[/color][color=#FF0000]o[/color][color=#FF0000]r[/color][color=#FF0000] [/color][color=#FF0000]o[/color][color=#FF0000]c[/color][color=#FF0000]c[/color][color=#FF0000]u[/color][color=#FF0000]r[/color][color=#FF0000]r[/color][color=#FF0000]e[/color][color=#FF0000]d[/color][color=#FF0000] [/color][color=#FF0000]w[/color][color=#FF0000]h[/color][color=#FF0000]i[/color][color=#FF0000]l[/color][color=#FF0000]e[/color][color=#FF0000] [/color][color=#FF0000]i[/color][color=#FF0000]n[/color][color=#FF0000]v[/color][color=#FF0000]o[/color][color=#FF0000]k[/color][color=#FF0000]i[/color][color=#FF0000]n[/color][color=#FF0000]g[/color][color=#FF0000] [/color][color=#FF0000]t[/color][color=#FF0000]a[/color][color=#FF0000]s[/color][color=#FF0000]k[/color][color=#FF0000].[/color][color=#FF0000] [/color][color=#FF0000]:[/color][color=#FF0000] [/color][color=#FF0000]"[/color] + e); } [color=#FF9D00]if[/color] (currentDelay < steadyStateInSeconds) { [color=#0257ae]long[/color] nextDelay = currentDelay * [color=#b0948a]2[/color] > steadyStateInSeconds ? steadyStateInSeconds : currentDelay * [color=#b0948a]2[/color]; System.out.println([color=#FF0000]"[/color][color=#FF0000]R[/color][color=#FF0000]e[/color][color=#FF0000]-[/color][color=#FF0000]s[/color][color=#FF0000]c[/color][color=#FF0000]h[/color][color=#FF0000]e[/color][color=#FF0000]d[/color][color=#FF0000]u[/color][color=#FF0000]l[/color][color=#FF0000]i[/color][color=#FF0000]n[/color][color=#FF0000]g[/color][color=#FF0000] [/color][color=#FF0000]t[/color][color=#FF0000]a[/color][color=#FF0000]s[/color][color=#FF0000]k[/color][color=#FF0000] [/color][color=#FF0000]t[/color][color=#FF0000]o[/color][color=#FF0000] [/color][color=#FF0000]r[/color][color=#FF0000]u[/color][color=#FF0000]n[/color][color=#FF0000] [/color][color=#FF0000]i[/color][color=#FF0000]n[/color][color=#FF0000] [/color][color=#FF0000]"[/color] + nextDelay + [color=#FF0000]"[/color][color=#FF0000] [/color][color=#FF0000]s[/color][color=#FF0000]e[/color][color=#FF0000]c[/color][color=#FF0000]o[/color][color=#FF0000]n[/color][color=#FF0000]d[/color][color=#FF0000]s[/color][color=#FF0000]"[/color]); scheduleIn(task, nextDelay, retryCount + [color=#b0948a]1[/color]); } [color=#FF9D00]else[/color] { System.out.println(steadyStateInSeconds + [color=#FF0000]"[/color][color=#FF0000] [/color][color=#FF0000]s[/color][color=#FF0000]e[/color][color=#FF0000]c[/color][color=#FF0000]o[/color][color=#FF0000]n[/color][color=#FF0000]d[/color][color=#FF0000]s[/color][color=#FF0000] [/color][color=#FF0000]s[/color][color=#FF0000]t[/color][color=#FF0000]e[/color][color=#FF0000]a[/color][color=#FF0000]d[/color][color=#FF0000]y[/color][color=#FF0000]s[/color][color=#FF0000]t[/color][color=#FF0000]a[/color][color=#FF0000]t[/color][color=#FF0000]e[/color][color=#FF0000] [/color][color=#FF0000]h[/color][color=#FF0000]a[/color][color=#FF0000]s[/color][color=#FF0000] [/color][color=#FF0000]b[/color][color=#FF0000]e[/color][color=#FF0000]e[/color][color=#FF0000]n[/color][color=#FF0000] [/color][color=#FF0000]r[/color][color=#FF0000]e[/color][color=#FF0000]a[/color][color=#FF0000]c[/color][color=#FF0000]h[/color][color=#FF0000]e[/color][color=#FF0000]d[/color][color=#FF0000].[/color][color=#FF0000] [/color][color=#FF0000]T[/color][color=#FF0000]a[/color][color=#FF0000]s[/color][color=#FF0000]k[/color][color=#FF0000] [/color][color=#FF0000]C[/color][color=#FF0000]o[/color][color=#FF0000]m[/color][color=#FF0000]p[/color][color=#FF0000]l[/color][color=#FF0000]e[/color][color=#FF0000]t[/color][color=#FF0000]e[/color][color=#FF0000]d[/color][color=#FF0000]![/color][color=#FF0000]"[/color]); } } } } Task.java [color=#CCCCCC]package[/color] challenge; [color=#0257ae]public[/color] [color=#0257ae]interface[/color] Task { [color=#0257ae]void[/color] execute(); } SampleTask.java [color=#CCCCCC]package[/color] challenge; [color=#0257ae]public[/color] [color=#0257ae]class[/color] SampleTask [color=#0257ae]implements[/color] Task { @Override [color=#0257ae]public[/color] [color=#0257ae]void[/color] execute() { System.out.println([color=#FF0000]"[/color][color=#FF0000]S[/color][color=#FF0000]u[/color][color=#FF0000]c[/color][color=#FF0000]c[/color][color=#FF0000]e[/color][color=#FF0000]s[/color][color=#FF0000]s[/color][color=#FF0000]f[/color][color=#FF0000]u[/color][color=#FF0000]l[/color][color=#FF0000]l[/color][color=#FF0000]y[/color][color=#FF0000] [/color][color=#FF0000]r[/color][color=#FF0000]a[/color][color=#FF0000]n[/color][color=#FF0000] [/color][color=#FF0000]s[/color][color=#FF0000]a[/color][color=#FF0000]m[/color][color=#FF0000]p[/color][color=#FF0000]l[/color][color=#FF0000]e[/color][color=#FF0000]T[/color][color=#FF0000]a[/color][color=#FF0000]s[/color][color=#FF0000]k[/color][color=#FF0000]![/color][color=#FF0000]"[/color]); } } TimerMain.java [color=#CCCCCC]package[/color] challenge; [color=#0257ae]public[/color] [color=#0257ae]class[/color] TimerMain { [color=#0257ae]public[/color] [color=#0257ae]static[/color] [color=#0257ae]void[/color] main(String[] args) [color=#0257ae]throws[/color] InterruptedException { ExponentialTimer exponentialTimer = [color=#FF9D00]new[/color] ExponentialTimer([color=#b0948a]8[/color]); exponentialTimer.invoke([color=#FF9D00]new[/color] SampleTask()); } } Sample Results Executing task. . . #1 Successfully ran sampleTask! Re-scheduling task to run in 2 seconds Executing task. . . #2 Successfully ran sampleTask! Re-scheduling task to run in 4 seconds Executing task. . . #3 Successfully ran sampleTask! Re-scheduling task to run in 8 seconds Executing task. . . #4 Successfully ran sampleTask! 8 seconds steadystate has been reached. Task Completed! |
| Re: Java Coding Challenge: Task Scheduler by Fayimora(m): 6:29pm On Aug 09, 2011 |
[size=18pt]THREAD CLEANED UP![/size] |
Mini Web Application Coding Challenge For Programmers • Coding Challenge 5: Substring Generator • Appointment Scheduler In Asp • 2 • 3 • 4
Developers In The House, Show Us What You're Currently Working On • I Want To Build Websites All By Myself • Hackers