Java多线程:执行对象方法的线程是否依赖于创建对象方法的线程?

Java多线程:执行对象方法的线程是否依赖于创建对象方法的线程?,java,Java,执行对象方法的线程是否依赖于创建对象方法的线程 假设java应用程序中有两个线程Thread1和Thread2以及两个类ClassA和ClassB 在线程1上创建ObjectOfClassA,然后在线程2上创建ObjectOfClassB,ObjectOfClassB包含对ObjectOfClassA的引用。当ObjectOfClassB运行ObjectOfClassA方法时,该方法将在哪个线程上执行 在您的回答中,请提供相关文档的链接 根据我所看到的,我感觉到对象方法的执行与创建它的线程完全正

执行对象方法的线程是否依赖于创建对象方法的线程

假设java应用程序中有两个线程Thread1和Thread2以及两个类ClassA和ClassB

在线程1上创建ObjectOfClassA,然后在线程2上创建ObjectOfClassB,ObjectOfClassB包含对ObjectOfClassA的引用。当ObjectOfClassB运行ObjectOfClassA方法时,该方法将在哪个线程上执行

在您的回答中,请提供相关文档的链接


根据我所看到的,我感觉到对象方法的执行与创建它的线程完全正交,但我不确定。

没有自动线程切换这样的事情,因此每次方法调用都发生在“当前线程”上,无论对象是在哪个线程上创建的

在线程1上创建ObjectOfClassA,然后在线程2上创建ObjectOfClassB,ObjectOfClassB包含对ObjectOfClassA的引用。当ObjectOfClassB运行ObjectOfClassA方法时,该方法将在哪个线程上执行


在运行ObjectOfClassB本身的调用方方法的同一个线程上(我想应该是Thread2…但正如@Andrzej所指出的,它也可以是另一个第三个线程)。这完全独立于哪个线程创建了哪个对象。重要的只是给定对象是否发布(即可用)到给定线程。如果是,它可以由该线程运行。

…当然,如果您有一个完全独立的第三个线程调用
b.foo(a)
,该方法将在该第三个线程中执行。@AndrzejDoyle,确实,谢谢。我添加了进一步的解释来阐述这一点。在java中“发布”一个对象与保存一个对象的引用是一样的吗?我以前从未听说过这个术语。@tjb,“发布对象意味着使其可用于其当前作用域之外的代码,例如通过将对它的引用存储在其他代码可以找到它的位置,从非私有方法返回它,或将它传递给另一个类中的方法。”-摘自第3.2章。