₦airaland Forum

Welcome, Guest: RegisterLoginWith GoogleTrendingRecentNew

Stats: 3,325,056 members, 8,420,074 topics. Date: Thursday, 04 June 2026 at 10:54 AM

Toggle theme

Java Coding Challenge: Task Scheduler - Programming (2) - Nairaland

Nairaland ForumScience/TechnologyProgrammingJava Coding Challenge: Task Scheduler (8754 Views)

1 2 Reply

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]
1 2 Reply

Mini Web Application Coding Challenge For ProgrammersCoding Challenge 5: Substring GeneratorAppointment Scheduler In Asp234

Developers In The House, Show Us What You're Currently Working OnI Want To Build Websites All By MyselfHackers