ScheduledThreadPoolExecutor
全部标签 我有以下问题,标准库不能很好地解决,我想知道是否有人见过另一个库可以做到这一点,所以我不需要拼凑一个自定义解决方案。我有一个当前使用scheduleWithFixedDelay()在线程池上安排的任务,我需要修改代码以处理“紧急”执行与异步事件相关的任务的请求。因此,如果任务计划在两次执行之间延迟5分钟发生,并且在上次完成执行后2分钟发生事件,我想立即执行任务,然后让它在完成后等待5分钟再次运行之前的紧急执行。现在我能想到的最好的解决方案是让事件处理程序在scheduleWithFixedDelay()返回的ScheduledFuture对象上调用cancel()并立即执行任务,然后在
ScheduledThreadPoolExecutor的文档说-安排在完全相同执行时间的任务以先进先出(FIFO)的提交顺序启用。这是否意味着应该同时完成的任务永远不会同时完成。相反,它们以FIFO顺序执行?如果那是真的那么我应该使用哪个类比Timer更好并且没有这个FIFO问题? 最佳答案 ScheduledThreadPoolExecutor的工作方式是有一个"dispatch"或主线程来检查要执行的任务。如果它找到一个任务,它会将它委托(delegate)给池中的“工作”线程。如果多个任务准备好执行,它们将一次“启动”一个任务
我有这个简单的代码片段:/***@paramargsthecommandlinearguments*/publicstaticvoidmain(String[]args){ScheduledThreadPoolExecutorexec=newScheduledThreadPoolExecutor(10);Runnabler=newRunnable(){@Overridepublicvoidrun(){System.err.println(Calendar.getInstance().getTime());}};exec.scheduleAtFixedRate(r,0,500,TimeU
目录ScheduledThreadPoolExecutor一、概述二、常用方法1、schedule方法2、scheduleAtFixedRate方法3.scheduleWithFixedDelay方法三、ScheduledExecutorService的创建方式ScheduledThreadPoolExecutor一、概述java中ScheduledExecutorService接口是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。其中的一个实现类是ScheduledThreadPoolExecutor(1)>ScheduledT
如果您需要在一台机器上的jvm中尽可能快地安排大量(非阻塞)任务,我正在考虑使用什么计时器实现。我研究了ScheduledThreadPoolExecutor和HashedWheelTimer来源(+wheeltimergeneraldocs),这里是基本差异(N-到目前为止所有未完成的计划任务的数量,C-车轮尺寸):调度线程池执行器O(logN)添加新任务每个计时器滴答的时间复杂度为O(1)(但每个任务滴答一次,所以总共有N个)O(logN)取消任务每个滴答/任务锁定HashedWheelTimerO(1)添加新任务O(m)每个计时器滴答声(m~N/C,其中C>512大约),所以~C
这个问题在这里已经有了答案:Howtorunabackgroundtaskinaservletbasedwebapplication?(5个答案)关闭7年前。有人告诉我,你不应该从运行在Tomcat(或任何其他容器,大概)下的webapp启动你自己的线程RunnablemyRunnable=newRunnable(){publicvoidrun(){System.out.println("I'mrunning");}}newThread(myRunnable).start();或者类似的:ScheduledThreadPoolExecutorretrySchedulerService=
我有一个任务需要我安排任务并在特定事件发生时将其删除。我正在使用ScheduledThreadPoolExecutor来安排任务,这非常简单。但是,我找到了两种取消待定项目的方法,它们看起来都有点奇怪。我很好奇它们是否达到生产质量。如果两者都不是,那么您有什么建议?这是我所做工作的框架:privatefinalScheduledThreadPoolExecutorscheduler=newScheduledThreadPoolExecutor(1);publicvoiddoStuff(){//...scheduler.schedule(newRunnable(){/*...*/},10
我写了下面的代码:importjava.util.Calendar;importjava.util.concurrent.ScheduledThreadPoolExecutor;importjava.util.concurrent.TimeUnit;classVoter{publicstaticvoidmain(String[]args){ScheduledThreadPoolExecutorstpe=newScheduledThreadPoolExecutor(2);stpe.scheduleAtFixedRate(newShoot(),0,1,TimeUnit.SECONDS);}
我有这个:ScheduledExecutorServicescheduledThreadPool=Executors.newScheduledThreadPool(5);然后我开始这样的任务:scheduledThreadPool.scheduleAtFixedRate(runnable,0,seconds,TimeUnit.SECONDS);我以这种方式保留对Future的引用:ScheduledFuturescheduledFuture=scheduledThreadPool.scheduleAtFixedRate(runnable,0,seconds,TimeUnit.SECON
我使用ThreadPool在Java中编写应用程序。首先我创建新的线程池:privateExecutorServicethreadExecutor=Executors.newFixedThreadPool(20);然后我创建了一些Runnable对象。之后我执行我的ThreadPool时不时地传递给他相同的Runnable对象:threadExecutor.execute(serverRunnable);我每20秒执行一次这个线程池。我的问题是threadExecutor停止工作大约5分钟。它只是不执行Runnable对象。我注意到当我增加参数时:Executors.newFixedT