【发布时间】:2018-09-11 20:55:50
【问题描述】:
所以我陷入了一个非常基本的 Java 问题。
即我有一个iteration 需要在inner class 完成后进入下一个循环。但是由于inner class 需要花费大量时间,并且可以在inner class 中访问的variables 必须是final,所以它抛出了RejectedExecutionException。
java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@290074 rejected from java.util.concurrent.ThreadPoolExecutor@d50b99d[Running, pool size = 17, active threads = 17, queued tasks = 128, completed tasks = 42]
这是引发异常的简化解决方案。
for (int i = 0; i < 10;i++) {
String[] cmd = { "-i", imageToBeFiltered.toString(), "-filter_complex", filters[loopCounter], imageWithFilter.toString()};
ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
@Override
public void onSuccess(String message) {
super.onSuccess(message);
//Continue loop only if it has reached onSuccess or onFailure
}
@Override
public void onFailure(String message) {
super.onFailure(message);
//Continue loop only if it has reached onSuccess or onFailure
}
});
}
}
当执行正常的fori-loop 时,它并不总是等待所有terminal calls 完成并继续。
【问题讨论】:
-
ffmpeg.execute 正在为每次迭代在池中创建一个新线程,您似乎也用完了线程。例如,在
AsyncTask上进行计算或使用线程Executor来限制您的池等。目前还不清楚您要问什么,或者……确切地说是您实际尝试了什么。 -
@MartinMarconcini 好吧,我尝试通过展示我所做的来展示我的要求,这样更容易理解吗?