ScheduledExecutorService
全部标签 我有一个线程需要每10秒执行一次。该线程包含对另一台服务器上的数据库的多次调用(12-15)。此外,它还访问大约3个文件。因此,会有相当多的IO和网络开销。执行上述操作的最佳策略是什么?一种方法是将sleep方法与while循环一起使用,但那将是一个糟糕的设计。在这种情况下,类似于Timer的类会有帮助吗?另外,创建更多线程(一个用于IO,一个用于JDBC)而不是让它们在一个线程中运行会更好吗? 最佳答案 我发现一个ScheduledExecutorService是一个很好的方法来做到这一点。它可以说比Timer稍微复杂一些,但在交
之前用的是JavaTimer,后来改用ScheduledExecutorService,但是我的问题没有解决。由于在系统时间更改(通过ntpd)之前安排的任务不会按指定的延迟执行。没有相同的日志,因为什么都没有发生:(。在我的64位Linux目标中使用jre1.6.0_2664位。Update:ScheduledExecutorServiceworksfineonWindows.Problemisonlyon64bitLinuxbasedsystemrunning64bitJVM.Itworksfineon64bitlinuxrunning32bitJVM...strange.Have
因此,使用this链接作为引用,任何人都可以建议一个更优雅的解决方案来取消定期的ScheduledExecutorService任务吗?这是我目前正在做的一个例子://dostuff//ScheduleperiodictaskcurrentTask=exec.scheduleAtFixedRate(newRequestProgressRunnable(),0,5000,TimeUnit.MILLISECONDS);//RunnableprivateclassRequestProgressRunnableimplementsRunnable{//FieldmembersprivateIn
JUC包(java.util.concurrent)中提供了对定时任务的支持,即ScheduledExecutorService接口。本文对ScheduledExecutorService的介绍,将基于Timer类使用介绍进行,因此请先阅读Timer类使用介绍文章。1.Timer使用介绍一、创建ScheduledExecutorService对象ScheduledExecutorServiceexecutorService=Executors.newScheduledThreadPool(5);二、ScheduledExecutorService方法ScheduledExecutorServi
我需要让我的RSS提要阅读器每10分钟检查一次提要是否有新帖子,然后在有新帖子时解析它们。我还需要大约每分钟更新一次UI。我从不同的channel阅读和听到了不同的东西。我目前的理解是,我可以使用ScheduledThreadPoolExecutor来制作两个调度线程,其中一个需要一个Handler来更新UI。我不确定这些类或TimerTask的最有效用途是什么。我也很不确定在哪里创建这些子类。一位friend建议将TimerTask扩展为我的FeedParser类中的内部类,以使其更简单。但是,要以这种方式实现它,我必须使用TimerTask的run()方法而不覆盖它,这意味着我不能
我需要让我的RSS提要阅读器每10分钟检查一次提要是否有新帖子,然后在有新帖子时解析它们。我还需要大约每分钟更新一次UI。我从不同的channel阅读和听到了不同的东西。我目前的理解是,我可以使用ScheduledThreadPoolExecutor来制作两个调度线程,其中一个需要一个Handler来更新UI。我不确定这些类或TimerTask的最有效用途是什么。我也很不确定在哪里创建这些子类。一位friend建议将TimerTask扩展为我的FeedParser类中的内部类,以使其更简单。但是,要以这种方式实现它,我必须使用TimerTask的run()方法而不覆盖它,这意味着我不能
在ScheduledExecutorService中运行时,有没有一种很好的方法可以从任务本身中停止重复任务?假设,我有以下任务:Futuref=scheduledExecutor.scheduleAtFixedRate(newRunnable(){intcount=0;publicvoidrun(){System.out.println(count++);if(count==10){//???cancelself}}},1,1,TimeUnit.SECONDS);在外部,通过f.cancel()很容易取消,但是如何在指定位置停止重复呢?(通过AtomicReference传递Futu
在ScheduledExecutorService中运行时,有没有一种很好的方法可以从任务本身中停止重复任务?假设,我有以下任务:Futuref=scheduledExecutor.scheduleAtFixedRate(newRunnable(){intcount=0;publicvoidrun(){System.out.println(count++);if(count==10){//???cancelself}}},1,1,TimeUnit.SECONDS);在外部,通过f.cancel()很容易取消,但是如何在指定位置停止重复呢?(通过AtomicReference传递Futu
我想推迟做某事,就像设置一个倒数计时器,它会在一定时间后“做某事”。我希望我的程序的其余部分在我等待时继续运行,所以我尝试制作自己的Thread,其中包含一分钟的延迟:publicclassScratch{privatestaticbooleanoutOfTime=false;publicstaticvoidmain(String[]args){Threadcountdown=newThread(){@Overridepublicvoidrun(){try{//waitawhileSystem.out.println("Startingone-minutecountdownnow...
我想推迟做某事,就像设置一个倒数计时器,它会在一定时间后“做某事”。我希望我的程序的其余部分在我等待时继续运行,所以我尝试制作自己的Thread,其中包含一分钟的延迟:publicclassScratch{privatestaticbooleanoutOfTime=false;publicstaticvoidmain(String[]args){Threadcountdown=newThread(){@Overridepublicvoidrun(){try{//waitawhileSystem.out.println("Startingone-minutecountdownnow...