@Test publicvoidtestSchedule() { ScheduledExecutorServicescheduledThreadPool=null; try { scheduledThreadPool = Executors.newScheduledThreadPool(4); SimpleDateFormatsdf=newSimpleDateFormat("hh:mm:ss"); System.out.println("submit a callable task to threadpool, current time:" + sdf.format(newDate())); ScheduledFuture<String> scheduledFuture= scheduledThreadPool.schedule(() -> { System.out.println("start to execute task, current time:" + sdf.format(newDate())); TimeUnit.SECONDS.sleep(3L); return"success"; }, 2L, TimeUnit.SECONDS); System.out.println("result:" + scheduledFuture.get() + ", current time:" + sdf.format(newDate())); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } finally { if (scheduledThreadPool != null) { System.out.println("close the schedule threadpool!"); scheduledThreadPool.shutdown(); } } }
执行该方法会在控制台的输出:
1 2 3 4
submit a callable task to threadpool, current time:10:23:20 start to execute task, current time:10:23:22 result:success, current time:10:23:25 close the schedule threadpool!
submit a callable task to threadpool, current time:10:24:42 pool-1-thread-1 | start to execute task, current time :10:24:44 pool-1-thread-1 | start to execute task, current time :10:24:47 pool-1-thread-2 | start to execute task, current time :10:24:50 pool-1-thread-1 | start to execute task, current time :10:24:53 pool-1-thread-1 | start to execute task, current time :10:24:56 close the schedule threadpool!
submit a callable task to threadpool, current time:10:28:35 pool-1-thread-1 | start to execute task, current time :10:28:37 pool-1-thread-1 | start to execute task, current time :10:28:41 pool-1-thread-2 | start to execute task, current time :10:28:45 pool-1-thread-1 | start to execute task, current time :10:28:49 pool-1-thread-1 | start to execute task, current time :10:28:53 close the schedule threadpool!