那么,当一个对象被限制在一个线程中时,没有其他线程可以访问它吗?
不,这是相反的方法:如果您确保没有其他线程可以访问某个对象,则可以说该对象被限制在单个线程中。
没有语言或JVM级别的机制可以将对象限制为单个线程。您只需要确保没有对该对象的引用转义到另一个线程可以访问的位置。有诸如类之类的工具可以 帮助避免
泄漏引用,
ThreadLocal但是没有什么工具可以
确保 没有泄漏任何地方的引用。
例如:如果对对象的 唯一 引用来自局部变量,则该对象 肯定会 限制在单个线程中,因为其他线程永远无法访问局部变量。
同样,如果对一个对象的 唯一 引用来自另一个对象,该对象已被证明仅限于单个线程,则该第一个对象将被限制在同一线程中。
广告编辑:
实际上,您可以拥有一个对象,该对象只能在一个线程的生命周期内一次访问,但是单个线程会对此
Connection对象进行更改(连接池中的JDBC
对象就是一个很好的例子)。
证明 ,这样的对象永远只能由一个线程访问比证明它对于用于局限于一个对象更难 单 但其整个生命过程中的线程。
在我看来,这些对象从未真正被“限制在单个线程中”(这意味着有力保证),而可以说“仅一次被单个线程使用”。



