How to use TimerTask with lambdas?

后端 未结 5 1715
逝去的感伤
逝去的感伤 2020-12-05 14:29

As you hopefully know you can use lambdas in Java 8, for example to replace anonymous methods.

An example can be seen here of Java 7 vs Java 8:

Runna         


        
5条回答
  •  长情又很酷
    2020-12-05 14:55

    While Marko's answer is perfectly correct, I prefer my implementation:

    public class FunctionalTimerTask extends TimerTask {
    
        Runnable task;
    
        public FunctionalTimerTask(Runnable task) {
            this.task = task;
        }
    
        @Override
        public void run() {
            task.run();
        }
    }
    
     public static class Task {
        public static TimerTask set(Runnable run) {
            return new FunctionalTimerTask(() -> System.err.println("task"));
        }
    }
    
     Timer timer = new Timer(false);
     timer.schedule(Task.set(() -> doStuff()), TimeUnit.SECONDS.toMillis(1));
    

    This gives you more control over the timer, and you have a static utility class. Idealy give it a name that won't conflict with other common thread class, so not Task, Job, Timer.

提交回复
热议问题