我知道我可以使用以下方式指定固定线程池大小
ExecutorService executor = Executors.newFixedThreadPool(10);
我可以将可运行对象添加到执行程序中,并且只要线程在池中空闲,它们就会执行
executor.execute(Obj);
我想限制要添加到执行程序服务的对象数,即如果我有100个可运行对象,则线程池大小为10,并且只有20个必须添加到ExecutorService中,其余部分必须被拒绝.
我想为执行程序创建一个固定大小的等待列表,以便与其添加所有100个对象并使它们保持等待状态,不如将所有项目保持固定的等待状态
我通过了Executor和ExecutorService API,但是找不到任何这样的东西,只是想知道这是否可行?
解决方法:
查看ThreadPoolExecutor的构造函数.您可以为执行者提供一个有界队列和拒绝策略.拒绝策略告诉执行者,当您尝试提交超出其处理能力的任务时该怎么做.
例:
ExecutorService executor =
new ThreadPoolExecutor(N_THREADS, N_THREADS, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(CAPACITY),
new ThreadPoolExecutor.CallerRunsPolicy());