Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import static java.lang.System.currentTimeMillis;
import static java.lang.System.out;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class Main {
    public static void main(String[] args) {
        List<Runnable> runnables = Arrays.asList(new Runnable[] { new Runnable() {
            public void run() {
                out.println("I'm the one");
            }
        }, new Runnable() {
            public void run() {
                out.println("I'm the two");
            }
        }, new Runnable() {
            public void run() {
                out.println("I'm the three");
            }
        }, new Runnable() {
            public void run() {
                out.println("I'm the four");
            }
        }, });
        for (Runnable run : runnables) {
            new ExecuteTask(run).start();
        }

    }
}

class ExecuteTask extends TimerTask {
    static Map<Timer, Long> upTo = new HashMap<Timer, Long>();
    static Random random = new Random();
    Timer owner;
    Runnable task;

    public ExecuteTask(Runnable task) {
        this.owner = new Timer();
        this.task = task;
        upTo.put(owner, currentTimeMillis() + random.nextInt(10) * 1000);
    }

    public void start() {
        owner.schedule(this, 0, 1000);
    }

    public void run() {
        if (shouldRunAgain()) {
            task.run();
        } else {
            owner.cancel();
        }
    }

    private boolean shouldRunAgain() {
        return ExecuteTask.upTo.get(owner) > currentTimeMillis();
    }
}