在阅读java的并发api时,我开始了解Exchanger
类。
来自Java文档,
"A synchronization point at which threads can pair and swap elements within pairs. Each thread presents some object on entry to the exchange method, matches with a partner thread, and receives its partner's object on return. An Exchanger may be viewed as a bidirectional form of a SynchronousQueue. Exchangers may be useful in
applications such as genetic algorithms and pipeline designs.
“
我探索并找到以下链接The Exchanger & GC-less Java
它说,
“Exchanger类对于在两者之间来回传递数据非常有用 两个线程。例如生产者/消费者。它具有自然的特性 回收用于传递工作和支持的数据结构 无GC以低效的方式分享工作。“
它如何支持 "GC-less sharing of work"
?
答案 0 :(得分:1)
从字面上看,它不受支持,它只是设计了你正确使用它的方式。正如您所说,好处将是无GC共享工作。实际上,它只是一种避免垃圾创建的编程技术,如临时对象,交换对象等。exchange
方法将始终返回您正在交换的对象。因此,无需运行GC,因为您可以重复使用旧对象进行下一次交换。在其他情况下,如果您不重用返回的对象,则它仍然不能GC-less
。
答案 1 :(得分:0)
与LinkedBlockingQueue
或ArrayBlockingQueue
不同,Exchanger
不会创建用于保存对象的节点或数组。您必须创建交换机。缺点是,它只能容纳一个对象。