2

在Java中实例化一个对象时,它是否绑定到实例化的线程?因为当我在一个线程中匿名实现一个接口,并将其传递给另一个线程运行时,它的所有方法都在原来的线程中运行。如果它们被绑定到它们的创建线程,那么无论如何创建一个将在任何线程调用它的线程中运行的对象?

4

2 回答 2

3

如果线程A创建一个对象:

MyClass.staticMember = new Runnable() {...};

并且线程B调用该对象的方法:

MyClass.staticMember.run();

然后该run()方法将在线程B中执行。

线程A将简单地继续运行它当时正在运行的任何代码。

于 2010-03-15T05:29:21.457 回答
1

该对象未绑定到创建它的线程...在主线程上执行方法的唯一方法是在主线程上调用它们。

查看哪个线程正在调用该方法相对容易......只需创建一个虚拟函数:

public threadDetect(string which)
{
    System.out.println("Executed from " + which + " thread.");
}

在您调用的主线程中:

threadDetect("main");

从您调用的子线程:

threadDetect("child");

我不确定 OP 是否使用类似的方法来检测哪个线程正在执行该方法,但这是一种方法。

于 2010-03-15T04:59:01.627 回答