Change list by a queue in order to use a thread-safe non-blocking concurrent queue

Signed-off-by: Quentin Legot <legotquentin@gmail.com>
This commit is contained in:
Quentin Legot 2023-02-20 14:19:51 +01:00
parent 10f4ac013e
commit 1a4e3481d5
5 changed files with 16 additions and 14 deletions

View File

@ -2,13 +2,14 @@ package fr.altarik.toolbox.task;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Queue;
public class Scheduler implements Runnable { public class Scheduler implements Runnable {
private final List<SchedulerTaskData> tasks; private final Queue<SchedulerTaskData> tasks;
private final SendTaskWorkerI worker; private final SendTaskWorkerI worker;
public Scheduler(SendTaskWorkerI worker, List<SchedulerTaskData> tasks) { public Scheduler(SendTaskWorkerI worker, Queue<SchedulerTaskData> tasks) {
this.worker = worker; this.worker = worker;
this.tasks = tasks; this.tasks = tasks;
} }

View File

@ -2,7 +2,8 @@ package fr.altarik.toolbox.task.async;
import fr.altarik.toolbox.task.*; import fr.altarik.toolbox.task.*;
import java.util.Stack; import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -14,7 +15,7 @@ import java.util.concurrent.TimeUnit;
public class AsyncPeriodicTasks implements PeriodicTaskI, AsyncTaskI, SendTaskWorkerI { public class AsyncPeriodicTasks implements PeriodicTaskI, AsyncTaskI, SendTaskWorkerI {
private final ExecutorService worker; private final ExecutorService worker;
private final Stack<SchedulerTaskData> tasks; private final Queue<SchedulerTaskData> tasks;
protected final Scheduler scheduler; protected final Scheduler scheduler;
private final ServerTickListener listener; private final ServerTickListener listener;
@ -26,7 +27,7 @@ public class AsyncPeriodicTasks implements PeriodicTaskI, AsyncTaskI, SendTaskWo
} else { } else {
worker = Executors.newFixedThreadPool(numberOfWorker); worker = Executors.newFixedThreadPool(numberOfWorker);
} }
tasks = new Stack<>(); tasks = new ConcurrentLinkedQueue<>();
this.scheduler = new Scheduler(this, tasks); this.scheduler = new Scheduler(this, tasks);
this.listener = new ServerTickListener(scheduler); this.listener = new ServerTickListener(scheduler);
} }

View File

@ -2,17 +2,17 @@ package fr.altarik.toolbox.task.sync;
import fr.altarik.toolbox.task.*; import fr.altarik.toolbox.task.*;
import java.util.ArrayList; import java.util.Queue;
import java.util.List; import java.util.concurrent.ConcurrentLinkedQueue;
public class PeriodicSyncTask implements PeriodicTaskI, SendTaskWorkerI { public class PeriodicSyncTask implements PeriodicTaskI, SendTaskWorkerI {
private final ServerTickListener listener; private final ServerTickListener listener;
private final List<SchedulerTaskData> tasks; private final Queue<SchedulerTaskData> tasks;
protected final Scheduler scheduler; protected final Scheduler scheduler;
private PeriodicSyncTask() { private PeriodicSyncTask() {
this.tasks = new ArrayList<>(2); this.tasks = new ConcurrentLinkedQueue<>();
this.scheduler = new Scheduler(this, tasks); this.scheduler = new Scheduler(this, tasks);
this.listener = new ServerTickListener(scheduler); this.listener = new ServerTickListener(scheduler);
} }

View File

@ -2,17 +2,17 @@ package fr.altarik.toolbox.task.sync;
import fr.altarik.toolbox.task.*; import fr.altarik.toolbox.task.*;
import java.util.ArrayList; import java.util.Queue;
import java.util.List; import java.util.concurrent.ConcurrentLinkedQueue;
public class SyncTask implements TaskI, SendTaskWorkerI { public class SyncTask implements TaskI, SendTaskWorkerI {
private final ServerTickListener listener; private final ServerTickListener listener;
private final List<SchedulerTaskData> tasks; private final Queue<SchedulerTaskData> tasks;
protected final Scheduler scheduler; protected final Scheduler scheduler;
private SyncTask() { private SyncTask() {
this.tasks = new ArrayList<>(2); this.tasks = new ConcurrentLinkedQueue<>();
this.scheduler = new Scheduler(this, tasks); this.scheduler = new Scheduler(this, tasks);
this.listener = new ServerTickListener(scheduler); this.listener = new ServerTickListener(scheduler);
} }

View File

@ -8,6 +8,6 @@ loader_version=0.14.12
fabric_version=0.70.0+1.19.3 fabric_version=0.70.0+1.19.3
maven_group=fr.altarik.toolbox maven_group=fr.altarik.toolbox
maven_version=3.0.1-SNAPSHOT maven_version=4.0.0-SNAPSHOT
repo_username=Altarik repo_username=Altarik
repo_password=password repo_password=password