目前我正在使用Executor:
Executors.newSingleThreadExecutor();
Run Code Online (Sandbox Code Playgroud)
但我的问题是,如果我把它放得太多,那么它们的执行速度太慢而且我的UI会在执行程序完成时挂起.所以我希望它表现得很好,执行者只能一次执行任务.但是当提交新任务时,如果有超过5个任务,我希望他放弃排队任务.
那可能吗?
Executors#newSingleThreadExecutor只是直接实例化的便利ThreadPoolExecutor,它为您提供了更多的配置选项.您可以将a配置ThreadPoolExecutor为使用单个线程和固定长度的队列,并为其指定一个处理程序,该处理程序规定在提交新任务时应丢弃队列的内容,如下所示:
new ThreadPoolExecutor(
1, 1, // single thread
30, TimeUnit.SECONDS, // timeout, see javadoc
new LinkedBlockingQueue(1), // queue with capacity 1
new ThreadPoolExecutor.DiscardOldestPolicy() // ditch the queued task when a new one comes in
);
Run Code Online (Sandbox Code Playgroud)
这里的关键部分是固定大小的队列(在本例中为1),以及拒绝处理程序参数:
被拒绝任务的处理程序,它丢弃最早的未处理请求,然后重试执行
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |