Java多线程:执行对象方法的线程是否取决于创建它的线程上的线程?

时间:2012-04-20 09:24:30

标签: java

执行对象方法的线程是否取决于创建它的线程上的线程?

想象一下,在java应用程序Thread1和Thread2中有两个线程,在ClassA和ClassB中有两个类。

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

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

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

2 个答案:

答案 0 :(得分:7)

没有自动线程切换这样的东西,所以每个方法调用都发生在'当前线程'上,无论在哪个线程上创建了对象。

答案 1 :(得分:2)

  

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

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