How to start a thread after specified time delay in java

前端 未结 5 881
轮回少年
轮回少年 2020-12-14 07:59

I have called a method in ServletContextListener as thread ..Now as per my need i have to delay the thread for 1 minutes and then start executing the method called in the th

5条回答
  •  清歌不尽
    2020-12-14 08:08

    To do this properly, you need to use a ScheduledThreadPoolExecutor and use the function schedule like this:

    final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(NUM_THREADS);
    executor.schedule(new Runnable() {
      @Override
      public void run() {
        captureCDRProcess();
      }
    }, 1, TimeUnit.MINUTES);
    

    Thread.sleep is not the way to go, because it does not guarantee that it wakes up after a minute. Depending on the OS and the background tasks, it could be 60 seconds, 62 seconds or 3 hours, while the scheduler above actually uses the correct OS implementation for scheduling and is therefore much more accurate.

    In addition this scheduler allows several other flexible ways to schedule tasks like at a fixed rate or fixed delay.

    Edit: Same solution using the new Java8 Lamda syntax:

    final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(NUM_THREADS);
    executor.schedule(() -> captureCDRProcess(), 1, TimeUnit.MINUTES);
    

提交回复
热议问题