1

在阅读有关 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"

4

2 回答 2

1

从字面上看,它不受支持,它只是设计了您可以正确使用它的方式。正如您所说,好处将是无GC 的共享工作。实际上,它只是一种避免垃圾创建的编程技术,例如临时对象、交换对象等。该exchange方法将始终返回您正在交换的对象。因此,不需要运行 GC,因为您可以重用旧对象进行下一次交换。在其他情况下,如果您不重用返回的对象,它就不能是 still GC-less

于 2013-08-21T14:18:25.807 回答
0

LinkedBlockingQueues 或ArrayBlockingQueues 不同,Exchangernoch 创建节点或数组来保存对象。不过,您必须创建交换器。缺点是它只能容纳一个物体。

于 2013-08-22T09:21:30.263 回答