【发布时间】:2016-06-16 21:18:58
【问题描述】:
我需要管理许多后台线程,这些线程以某些对象为关键,但只有一个线程可以同时处理同一个对象,例如,当thread A 正在处理object A 时,如果调用了thread B对于使用object A,应在thread B 运行之前取消thread A。
这是我的代码,但是当我运行时,第一个线程不会停止并继续执行第二个:
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);
}
我在这里错过了什么?
提前致谢。
PS:
当使用ImageView 作为关键对象取消请求时,我需要类似Picasso API 的行为。
【问题讨论】:
-
为此使用 RxJava
标签: java android multithreading executorservice futuretask