Ich muss viele Hintergrund-Threads verwalten, die etwas mit einigen Objekten als Schlüssel tun, aber nur ein Thread kann mit demselben Objekt zur gleichen Zeit arbeiten, zum Beispiel während thread A
arbeitet an object A
arbeitet, Wenn thread B
zum Arbeiten mit object A
aufgerufen wird, sollte thread A
abgebrochen werden, bevor thread B
ausgeführt werden kann.Implementieren Sie einen Abbrechen Thread-Manager für ein eindeutiges Objekt
Hier ist mein Code, aber wenn ich laufe, Der erste Thread nicht stoppen und setzt sich mit zweiten:
private static ExecutorService mExecutor = Executors.newCachedThreadPool();
private static ConcurrentMap<Object, Future> mRunningTasks = new ConcurrentHashMap<>();
public static void run(final Runnable runnable, final Object key) {
Future<?> future = mRunningTasks.get(key);
if (future != null) {
future.cancel(true);
}
future = new FutureTask<>(new Runnable() {
@Override
public void run() {
//How to handle InterruptedException here ?
//while there's no potential to throw an InterruptedException
runnable.run();
mRunningTasks.remove(key);
}
}, null);
mRunningTasks.put(key, future);
mExecutor.execute((FutureTask) future);
}
Was soll ich hier fehlt?
Vielen Dank im Voraus.
PS: Ich brauche ein Verhalten wie Picasso
API, wenn Anforderungen Bricht eine ImageView
als Schlüssel-Objekt.
Verwenden Sie RxJava für das –