为了账号安全,请及时绑定邮箱和手机立即绑定

关于本章节中得mSemaphoreThreadPool

mSemaphoreThreadPool目的是为了运行的线程限制在init方法中得ThreadCount个数。

不过,ExecutorService是 fixedThreadPool ,初始化定了ThreadCount,之后即便瞬间execute(getTask())执行了100次,也始终只能同时跑ThreadCount得个数。

所以这里mSemaphoreThreadPool是不是多余了呢?

正在回答

2 回答

线程池自己的队列是FIFO,所以如果要LIFO需要自己维护一个队列,代替线程池的队列。你看这么搞了之后,线程池队列就没啥用了,执行完一个之后,mSemaphoreThreadPool才喂它下一个。

0 回复 有任何疑惑可以回复我~

Hyman老师不是说了为了凸显LIFO与FIFO的功能吗,因为线程池自己维护的队列如果在没有信号量的限制下,相当于直接所有的Task添加后,就全部也添加进线程池的自己维护的队列中去了(当然执行的线程只有threadCount个),我觉得信号量是主要用来帮助将TaskQueue中的数据按threadCount加入到线程中,这是最开始的情况,然后后面就是执行完一个线程,释放一个信号量,将Task放入线程池中执行。

0 回复 有任何疑惑可以回复我~
#1

Protocol 提问者

谢谢,我当时没听懂,就没理解过来。
2015-09-15 回复 有任何疑惑可以回复我~
#2

lee_

如果是为了凸显LIFO和FIFO,在getTask()方法中不就有控制吗?
2016-02-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android-仿微信图片选择器
  • 参与学习       29299    人
  • 解答问题       88    个

微信中的图片选择器综合案例不容错过,整体思路值得一学

进入课程

关于本章节中得mSemaphoreThreadPool

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信