在开发中遇到这样一个需求:
在用户登录的时候查询用户购买的授权的到期时间,如果到期时间在两个小时以内,那么两个小时候再次查询用户是否续期,如果没有续期,那么该用户就没有了该产品的授权。一开始考虑用定时任务,每小时进行一次所有用户的授权到期时间查询,但是这样挺浪费资源的。
所以就想到了可以new一个线程,用线程休眠来实现功能。
public class Test{ static ExecutorService fixedThreadPool = Executors.newCachedThreadPool(); public static String test() { String s ="1号执行时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); fixedThreadPool.execute(new Runnable() { @Override public void run() { try { Thread.sleep(5000); System.err.println("3号程执行时间" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); } catch (InterruptedException e) { e.printStackTrace(); } } }); return s; } public static void main(String[] args) { String s = test(); System.out.println(s); System.out.println("2号执行时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); } }已知的线程池有以下几类
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。 newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
以上,就实现了执行完一个方法后,定时再执行另一个方法的demo。