diff --git a/photon-server/src/main/java/org/photonvision/common/util/TimedTaskManager.java b/photon-server/src/main/java/org/photonvision/common/util/TimedTaskManager.java index 4206f1aff..d07176d61 100644 --- a/photon-server/src/main/java/org/photonvision/common/util/TimedTaskManager.java +++ b/photon-server/src/main/java/org/photonvision/common/util/TimedTaskManager.java @@ -48,40 +48,8 @@ public class TimedTaskManager { } } - private static class TimedTaskExecutorPool extends ScheduledThreadPoolExecutor { - public TimedTaskExecutorPool(int corePoolSize) { - super(corePoolSize, new CaughtThreadFactory()); - } - - // Thanks to Abdullah Ozturk for this tip - // https://medium.com/@aozturk/how-to-handle-uncaught-exceptions-in-java-abf819347906 - @Override - protected void afterExecute(Runnable runnable, Throwable throwable) { - super.afterExecute(runnable, throwable); - - // If submit() method is called instead of execute() - if (throwable == null && runnable instanceof Future) { - try { - //noinspection unused - Object result = ((Future) runnable).get(); - } catch (CancellationException e) { - throwable = e; - } catch (ExecutionException e) { - throwable = e.getCause(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - - if (throwable != null) { - logger.error("TimedTask threw uncaught exception!", throwable); - // Restart the runnable again - execute(runnable); - } - } - } - - private final ScheduledExecutorService timedTaskExecutorPool = new TimedTaskExecutorPool(2); + private final ScheduledExecutorService timedTaskExecutorPool = + new ScheduledThreadPoolExecutor(2, new CaughtThreadFactory()); private final ConcurrentHashMap> activeTasks = new ConcurrentHashMap<>(); public void addTask(String identifier, Runnable runnable, long millisInterval) { diff --git a/photon-server/src/test/java/org/photonvision/common/util/TimedTaskManagerTest.java b/photon-server/src/test/java/org/photonvision/common/util/TimedTaskManagerTest.java new file mode 100644 index 000000000..08caaeaa6 --- /dev/null +++ b/photon-server/src/test/java/org/photonvision/common/util/TimedTaskManagerTest.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2020 Photon Vision. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.photonvision.common.util; + +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class TimedTaskManagerTest { + + @Test + public void atomicIntegerIncrementTest() throws InterruptedException { + AtomicInteger i = new AtomicInteger(); + TimedTaskManager.getInstance().addTask("TaskManagerTest", i::getAndIncrement, 2); + Thread.sleep(400); + Assertions.assertEquals(200, i.get(), 5); + } +}