public static final long DISPOSE_TIME = 30000L; // ms
public static final long MIN_DELAY = 200L; // ms
- private final int maxQueueLength;
- private ArrayDeque<Runnable> disposerQueue = new ArrayDeque<Runnable>(MAX_QUEUE_LENGTH);
- private TObjectLongHashMap<Runnable> disposeTime =
- new TObjectLongHashMap<Runnable>(MAX_QUEUE_LENGTH);
+ private volatile int maxQueueLength;
+ private ArrayDeque<Runnable> disposerQueue;
+ private TObjectLongHashMap<Runnable> disposeTime;
private Runnable currentlyScheduled = null;
private Runnable disposeOne = () -> {
currentlyScheduled = null;
runnable.run();
if(DEBUG)
- System.out.println("Executed disposer " + runnable);
+ System.out.println("Executed disposer " + runnable); //$NON-NLS-1$
if(!disposerQueue.isEmpty())
scheduleDispose();
}
};
public DisposingPolicy() {
- this(MAX_QUEUE_LENGTH);
+ this(MAX_QUEUE_LENGTH);
}
public DisposingPolicy(int maxQueueLength) {
this.maxQueueLength = maxQueueLength;
+ this.disposerQueue = new ArrayDeque<>(maxQueueLength);
+ this.disposeTime = new TObjectLongHashMap<>(maxQueueLength);
+ }
+
+ public void setMaxQueueLength(int maxQueueLength) {
+ this.maxQueueLength = maxQueueLength;
}
private void scheduleDispose() {
MIN_DELAY);
Display.getCurrent().timerExec((int)delay, disposeOne);
if(DEBUG)
- System.out.println("Scheduled disposer " + currentlyScheduled + " in " + delay + " ms");
+ System.out.println("Scheduled disposer " + currentlyScheduled + " in " + delay + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
/**
*/
public void addDisposer(Runnable disposer) {
if(DEBUG)
- System.out.println("Added disposer " + disposer);
+ System.out.println("Added disposer " + disposer); //$NON-NLS-1$
if(disposeTime.contains(disposer))
return;
if(disposerQueue.size() >= maxQueueLength)
*/
public void removeDisposer(Runnable disposer) {
if(DEBUG)
- System.out.println("Removed disposer " + disposer);
+ System.out.println("Removed disposer " + disposer); //$NON-NLS-1$
disposerQueue.remove(disposer);
disposeTime.remove(disposer);
if(disposer == currentlyScheduled) {