Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ScheduledExecutorService同一可运行线程的多个线程_Java_Multithreading - Fatal编程技术网

Java ScheduledExecutorService同一可运行线程的多个线程

Java ScheduledExecutorService同一可运行线程的多个线程,java,multithreading,Java,Multithreading,我使用java的ScheduledExecutorService来安排一个每15分钟运行一次的任务 ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); scheduledExecutorService.scheduleWithFixedDelay(jobScheduler.getSomethingToDo(), 1, 5, TimeUnit.MINUTES); 在本地,

我使用java的ScheduledExecutorService来安排一个每15分钟运行一次的任务

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函数