Java 列表和队列中所有权模式的差异

Java 列表和队列中所有权模式的差异,java,multithreading,collections,Java,Multithreading,Collections,从代码来看,在LinkedList和ArayBlockingQueue的情况下,处理成员所有权的方式似乎有所不同 (其他人也可能如此——但到目前为止,我只关注上述内容。) 而在ArrayBlockingQueue的情况下,所有权似乎从输入线程转移到提取线程-在LinkedList中,放入对象的线程即使在单独的线程(可能)检索到对象后仍保持对该对象的引用 我的理解正确吗? 为什么我们的行为会有这种差异? (这里我同义使用实例和线程,因为实例将在特定线程中运行。)查看Oracle文档: 您可以

从代码来看,在
LinkedList
ArayBlockingQueue
的情况下,处理成员所有权的方式似乎有所不同
(其他人也可能如此——但到目前为止,我只关注上述内容。)

而在
ArrayBlockingQueue
的情况下,所有权似乎从输入线程转移到提取线程-在
LinkedList
中,放入对象的线程即使在单独的线程(可能)检索到对象后仍保持对该对象的引用

我的理解正确吗?
为什么我们的行为会有这种差异?

(这里我同义使用实例和线程,因为实例将在特定线程中运行。)

查看Oracle文档:

  • 您可以看到,它们在线程安全方面是不同的
第一个在当前子包内。 在第二个(LinkedList)中,您可以阅读“注意,此实现未同步”


这应该是您观察到的差异的原因。

LinkedList根本不提供任何线程安全或同步。你自己负责做那件事

concurrent
包集合确实在集合本身上提供了线程安全性,但是您仍然负责管理对集合中的对象所做的任何修改


Java中没有对象“所有权”的概念。

一些代码可能有助于理解您的问题!有关相应的类,请参考JDK