赞
踩
public static void main(String[] args) throws InterruptedException { ScheduledThreadPoolExecutor executor = (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(2); //如果为true,则 任务取消的时候 会从队列中把这个任务删除,默认是false //在默认的情况下,如果直接取消,并不会删除队列中的任务,反而会造成内在泄露 executor.setRemoveOnCancelPolicy(true); ScheduledFuture<?> task = executor.scheduleAtFixedRate(() -> { System.out.println(Thread.currentThread().getName() + " running..."); }, 0, 500, TimeUnit.MILLISECONDS); new Thread(new Runnable() { @Override public void run() { while (true) { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { throw new RuntimeException(e); } int size = executor.getQueue().size(); System.out.println(Thread.currentThread().getName() + " queue size:" + size); } } }, "monitor-thread").start(); TimeUnit.SECONDS.sleep(4); task.cancel(true); System.out.println(Thread.currentThread().getName() + " cancel the task.."); }
结果
pool-1-thread-1 running...
pool-1-thread-1 running...
monitor-thread queue size:1
pool-1-thread-1 running...
pool-1-thread-1 running...
monitor-thread queue size:1
pool-1-thread-1 running...
pool-1-thread-1 running...
monitor-thread queue size:1
pool-1-thread-1 running...
pool-1-thread-1 running...
main cancel the task..
monitor-thread queue size:0
monitor-thread queue size:0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。