使用ScheduledExecutorService计划的任务?一个好主意?

时间:2016-10-25 11:38:50

标签: java multithreading concurrency

我需要每天执行一些任务。我可以使用ScheduledExecutorService吗?说一段始终以特定间隔运行的代码。我怀疑我保持CPU忙于运行我的代码,但是这段代码将在一天,一周或一个月内运行我的实际任务取决于配置。

ScheduledExecutorService schedular = Executors.newScheduledThreadPool(1);
schedular.scheduleAtFixedRate(new MySchedular(), 1, 24, TimeUnit.HOUR);

或者我们有更好的选择吗?

2 个答案:

答案 0 :(得分:1)

对于非常基本的需求,您确实可以使用Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail job = JobBuilder.newJob(MySchedular.class) .withIdentity("job1", "group1") .build(); Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(22, 00)) .build(); // Tell quartz to schedule the job using our trigger scheduler.scheduleJob(job, trigger); // and start it off scheduler.start(); ,但如果您想要执行复杂的操作,例如在当天的某个特定时间安排任务,则应考虑使用{{3} }。

以下是如何在晚上10点安排任务:

Trigger trigger = TriggerBuilder.newTrigger()
    .withIdentity("trigger3", "group1")
    .withSchedule(CronScheduleBuilder.cronSchedule("0 22 00 * * ?"))
    .build(); 

使用~ modifiers创建的相同触发器将是:

 EditText editText = (EditText) findViewById(textView);
 Spannable wordtoSpan = new SpannableString("Hello world");

 wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 2, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

 editText.setHint(wordtoSpan);

答案 1 :(得分:0)

考虑到您使用的是Windows并且CronJob不可用,ScheduledExecutorService是您的一个非常好的选择。您需要关注的唯一问题是,如果由于某种原因您的进程终止而不是由于Windows重新启动,会发生什么。通常,关键系统具有某种Watchdog进程,可监视您的进程并在终止时重新启动它。但这可能超出了这个问题的范围。简而言之,您的问题的答案是:ScheduledExecutorService是正确的选择。