Java ScheduledExecutorService同一可运行线程的多个线程
我使用java的ScheduledExecutorService来安排一个每15分钟运行一次的任务Java ScheduledExecutorService同一可运行线程的多个线程,java,multithreading,Java,Multithreading,我使用java的ScheduledExecutorService来安排一个每15分钟运行一次的任务 ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); scheduledExecutorService.scheduleWithFixedDelay(jobScheduler.getSomethingToDo(), 1, 5, TimeUnit.MINUTES); 在本地,
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleWithFixedDelay(jobScheduler.getSomethingToDo(), 1, 5, TimeUnit.MINUTES);
在本地,一切都是完美的,但是当我在生产环境中运行了很长一段时间后,我可以在线程转储中看到,有时有不止一个somethingToDo线程。我已经将runnable的整个run方法包装在一个try/catch块中。我的朋友怎么了 是否可以使用上述代码创建多个调度程序?或者您正在代码中的其他位置运行somethingToDo任务?或者发布线程转储,显示带有
somethingToDo()
运行的两个堆栈确保您没有调用此方法(调度jobScheduler.getSomethingToDo()
)两次。它将创建与调用此代码块的次数相同的scheduledExecutorService
。该方法仅被调用一次。我确定了。jobScheduler.getSomethingToDo只被调用一次,我还确保使用IntelliJ usages函数可以使用上面的代码创建多个调度器吗?或者您正在代码中的其他位置运行somethingToDo任务?或者发布线程转储,显示带有somethingToDo()
运行的两个堆栈确保您没有调用此方法(调度jobScheduler.getSomethingToDo()
)两次。它将创建与调用此代码块的次数相同的scheduledExecutorService
。该方法仅被调用一次。我确定了。jobScheduler.getSomethingToDo只被调用一次,我还确保使用IntelliJ usages函数