Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 newSingleThreadScheduledExecutor的工作(如果线程已忙)_Java_Android - Fatal编程技术网

Java newSingleThreadScheduledExecutor的工作(如果线程已忙)

Java newSingleThreadScheduledExecutor的工作(如果线程已忙),java,android,Java,Android,我的要求是创建一个服务,该服务在特定的时间间隔后继续检查队列并处理队列中的元素 对于10秒后的计划任务,我使用: ScheduledExecutorService schd = Executors.newSingleThreadScheduledExecutor(); schd.scheduleAtFixedRate(readQueueRunnable, 10, 10, TimeUnit.SECONDS); 我的问题是假设第一次,队列中有许多元素,我的单个线程开始处理队列 即使在10秒之后,我

我的要求是创建一个服务,该服务在特定的时间间隔后继续检查队列并处理队列中的元素

对于10秒后的计划任务,我使用:

ScheduledExecutorService schd = Executors.newSingleThreadScheduledExecutor();
schd.scheduleAtFixedRate(readQueueRunnable, 10, 10, TimeUnit.SECONDS);
我的问题是假设第一次,队列中有许多元素,我的单个线程开始处理队列

即使在10秒之后,我的第一个线程仍然在执行它

因此,当10秒后再次调用runnable时,它将停止前一个正在执行的线程并启动新的线程。
或者,它将检查线程是否已经在运行&如果它正在运行,那么在这种情况下它将跳过进入Runnable内部创建一个具有单个线程的执行器,该线程永远不会与现有线程并行执行任何操作。它只有一个线程,一次只能执行一件事情

如果任务耗时超过10秒,它仍会在10秒后创建一个新任务,并将其放入等待完成的任务队列中。如果任务花费的时间总是比您计划它们的时间长,那么您将得到一个不断增长的任务队列,并且可能在某个时刻出现与内存相关的崩溃

因此,当10秒后再次调用runnable时,它将停止前一个正在执行的线程并启动新的线程

它不会阻止任何事情。执行器重复使用其线程。线程执行您按顺序提供给它的所有
Runnable
。因此,一旦第一个runnable完成,它将简单地执行下一个runnable

或者,它将检查线程是否已经在运行&如果它正在运行,那么在这种情况下它将跳过进入Runnable内部

它不会在10秒后跳过创建任务

这句话的解释是

如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行

“非并发”部分用于具有多个线程的执行器。这与此无关,因为这不可能发生



如果您希望任务之间总是有10秒的延迟,请使用
scheduleWithFixedDelay

调度队列检查听起来很奇怪,我只想在专用的消费者线程中使用。我可以为同一个工作者提供两个不同的可运行程序吗?@JaydevKalivarapu不确定这是什么意思,但是你可以根据需要安排任意多个不同的可运行程序。如果我想避免内存泄漏,我会说在一个操作和另一个操作之间必须经过10秒,但是如果一个操作持续30秒,它就不会保留等待时间的3倍?