同步移交阻塞队列的使用场景是什么?
来源:6-5 线程池可选择的阻塞队列

慕虎2571182
2019-11-13
老师,想问下同步移交阻塞队列在生产上一般是什么情况下使用的?感觉和同步执行没什么区别呢
写回答
1回答
-
同步移交队列是一个没有存储空间的阻塞队列,目的是避免任务排队。newCachedThreadPool就是使用的同步队列,所以可以做到一个任务提交后,立马会有一个线程来响应。如果线程池没有可用线程了,就会触发拒绝策略。在提交的任务需要被立即处理的场景下会用到。
关于同步执行和使用线程池执行的区别,我抽象场景,举个例子:
同步执行:可以考虑这样一种情况,双十一0点大促,同时有1000W人在付款,而付款这个方法比较耗时。如果同步执行,那相当于需要1000W个付款方法同时在执行。系统是承载不了的。
如果换成线程池处理,1000W人提交了1000W个付款任务,线程池最大线程数为100。那最先提交的100个任务立刻就会被处理,剩下的许多任务都会触发线程池的拒绝策略(因为是同步移交阻塞队列),可能会等待1秒再次请求。这样就保证系统最大承载100个付款任务。
如果有什么不明白的,可以QQ上私聊。
312019-11-13
相似问题