LinkedBlockingQueue.offer 为什么阻塞?

AoEiuV020JP · 2024-9-10 11:59:03 · 38 次点击
最近在做优化,android java,
性能分析时意外发现这个 offer 占用了不大不小的时间,
具体是个线程池(Executors.newFixedThreadPool)用到 new LinkedBlockingQueue<Runnable>(), 大量 submit 任务时 offer 耗时了,挺意外的,
不管怎么搜索都是告诉我 offer 不会等待, 那为什么 offer 耗时这么大呢?
而且 offer 中耗时的方法名是“art_jni_trampoline”, 看起来是安卓相关的,这不在 offer 源码里, 不知道这说明什么,
https://i.imgur.com/ruP23aJ.png
https://i.imgur.com/YoIn9Ha.png
举报· 38 次点击
登录 注册 站外分享
3 条回复  
hysli 小成 2024-9-10 12:51:46
是不是任务太多,导致队列满了,队列满了就会等待吧。
ysc3839 小成 2024-9-10 13:28:12
感觉是在等待锁
sinalvee 小成 2024-9-10 14:11:03
LinkedBlockingQueue 有 putLock 和 takeLock 两个锁,offer 方法要获取 putLock ,默认参数的时无界队列所以不会直接返回 false ,任务太多了等待锁的时间就会变长
返回顶部