G
Guest
Gast
Hallo
ich suche eine Möglichkeit, einen beliebigen Task eine gewisse Zeit nach der letzten Benutzereingabe auszuführen.
Meine bisherige Lösung ist einen Thread zu erzeugen, der die gewünschte Zeit schläft und die übergebene runnable aufruft. Wird resetTime() aufgerufen, wird der Thread unterbrochen, ein neuer erzeugt und gestartet.
Und genau das ist der Nachteil: Die vielen Threads die erzeugt und unterbrochen werden.
Vor allem wenn man diese Logik auf Mausbewegungen übertragen möchte, werden mit einer Mausbewegung hunderte Threads erzeugt und unterbrochen.
Hat jemand eine bessere Lösung?
Vielen Dank!
ich suche eine Möglichkeit, einen beliebigen Task eine gewisse Zeit nach der letzten Benutzereingabe auszuführen.
Meine bisherige Lösung ist einen Thread zu erzeugen, der die gewünschte Zeit schläft und die übergebene runnable aufruft. Wird resetTime() aufgerufen, wird der Thread unterbrochen, ein neuer erzeugt und gestartet.
Und genau das ist der Nachteil: Die vielen Threads die erzeugt und unterbrochen werden.
Vor allem wenn man diese Logik auf Mausbewegungen übertragen möchte, werden mit einer Mausbewegung hunderte Threads erzeugt und unterbrochen.
Hat jemand eine bessere Lösung?
Vielen Dank!
Code:
public class DelayedExecutionTimer {
private long delay;
private Runnable runnable;
private TimerThread timerThread;
public DelayedExecutionTimer(long delay, Runnable runnable) {
this.delay = delay;
this.runnable = runnable;
timerThread = new TimerThread();
timerThread.start();
}
public void resetTime() {
timerThread.interrupt();
timerThread = new TimerThread();
timerThread.start();
}
public void stopTime(){
timerThread.interrupt();
}
class TimerThread extends Thread {
public void run() {
try {
Thread.sleep(delay);
runnable.run();
} catch (InterruptedException e) {
} catch (Exception e) {
e.printStackTrace();
}
}
}
}