问题一:关于结合线程池的定时任务,除了以下方式二能够拿到返回值flag之外,还有什么方式能够拿到方式一内部类run()里面的flag,我尝试了使用ThreadLocal,但是会有空指针异常。
问题二:以下的定时任务如果是写在一个方法里面被调用,那么如何有条件的结束掉定时任务(用方式一举例)。
方式一:
Runnable runnable = () -> sendMail(XXX,XXX);
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.MINUTES);
方式二:
Callable<Boolean> callable = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
boolean flag;
if(业务判断){
flag = true;
}
return flag;
}
};
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.schedule(callable,1,TimeUnit.SECONDS);