我无法理解 Synchronous Queue有效。
我知道这个想法是任务直接移交给线程,但构造函数没有限制,例如像其他 API 一样的最大线程数。
所以当 put
或 offer
完成时,它实际上是否传递给另一个线程?
所以如果我这样做100个put
会传给100个线程吗?
我试图阅读源代码,但无法弄清楚会发生什么。它似乎创建了一个节点链表,其中每个节点都封装了一个线程,但是这个列表是如何维护的,例如展开/收缩等以及胎面如何运行任务对我来说并不清楚。
那么这个列表会随着我们提供任务而扩展吗?结果消费者线程(服务员)不断增加?
这些中有任何被重复使用的吗?或者只是执行某事然后停止?
最佳答案
听起来你误解了 SynchronousQueue
的目的.
SynchronousQueue
不创建任何线程。
当您调用 put
, put
直到另一个线程(您创建的线程)将该元素从 SynchronousQueue
中取出后才会完成.
“如果我这样做,例如 100 put
” 如果您有一百个线程,每个线程都调用 put
同样SynchronousQueue
,然后所有这些线程将等待直到其他线程开始 take
那些元素走了。如果你有一个线程,它只会做一个 put
一次,每次它都会等待另一个线程在添加另一个之前获取该元素。
内部使用的列表是一个链表,它像通常的链表一样扩展并获得 GC。
关于java - 同步队列是否在每个报价/放置上创建一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18475301/