- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
《Java并发实践》一书中的BoundedExecutor,任务提交已经被信号量限制了。底层执行器什么时候会抛出RejectedExecutionException?也许当操作系统耗尽线程时?
public class BoundedExecutor {
private final Executor exec;
private final Semaphore semaphore;
public BoundedExecutor(Executor exec, int bound) {
this.exec = exec;
this.semaphore = new Semaphore(bound);
}
public void submitTask(final Runnable command) throws InterruptedException, RejectedExecutionException
{
semaphore.acquire();
try {
exec.execute(new Runnable() {
@Override public void run() {
try {
command.run();
} finally {
semaphore.release();
}
}
});
} catch (RejectedExecutionException e) {
semaphore.release();
throw e;
}
}
}
最佳答案
Executor.execute()
契约(Contract)的一部分是它可以抛出 RejectedExecutionException
:
if this task cannot be accepted for execution
这对于任何给定的 Executor 实现意味着什么取决于该实现的判断。我可以创建一个 OnlyOnSundaysExecutor
来拒绝任务,除非一周中的当天是星期日。您必须检查各种 Executor
实现的文档,以了解它们在什么情况下会抛出 RejectedExecutionException
异常。
关于java - 为什么 BoundedExecutor 必须捕获 RejectedExecutionException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45288417/
这是《Java Concurrency in Practice》书中 BoundedExecutor 类的实现: public class BoundedExecutor { private
《Java并发实践》一书中的BoundedExecutor,任务提交已经被信号量限制了。底层执行器什么时候会抛出RejectedExecutionException?也许当操作系统耗尽线程时? pub
在《Java 并发实践》一书中,BoundedExecutor 的实现有些奇怪。 当有足够多的线程在执行器中排队或运行时,它应该通过阻塞提交线程来限制向执行器提交任务。 这是实现(在 catch 子句
我是一名优秀的程序员,十分优秀!