> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/ji-chu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/ji-chu/ji-chu-zhi-shi/java-bing-fa/xian-cheng-an-quan-de-rong-qi/bing-fa-rong-qi/blockingqueue/chuan-xing-xian-cheng-feng-bi.md).

# 串行线程封闭

**对于可变对象，生产者-消费者这种设计与阻塞队列一起，促进了**<mark style="color:blue;">**串行线程封闭**</mark>**，从而将对象所有权从生产者交付给消费者**。

* **线程封闭对象只能由单个线程拥有，但可以通过安全地发布该对象来“转移”所有权。**
* **在转移所有权后，也只有另一个线程能获得这个对象的访问权限，并且发布对象的线程不会再访问它。**&#x8FD9;种安全的发布确保了对象状态对于新的所有者来说是可见的，并且由于最初的所有者不会再访问它，因此对象将被封闭在新的线程中。
* **新的所有者线程可以对该对象做任意修改，因为它具有独占的访问权。**

{% hint style="success" %}
**对象池利用了串行线程封闭，将对象“借给”一个请求线程。**&#x53EA;要对象池包含足够的内部同步来安全地发布池中的对象，并且只要客户代码本身不会发布池中的对象，或者在将对象返回给对象池后就不再使用它，那么就可以安全地在线程之间传递所有权。
{% endhint %}

{% hint style="success" %}
也可以使用其他发布机制来传递可变对象的所有权，但**必须确保只有一个线程能接收被转移的对象**。阻塞队列简化了这项工作。
{% endhint %}
