基本的Java多线程问题

时间:2010-03-15 04:54:21

标签: java multithreading stack heap anonymous-class

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

2 个答案:

答案 0 :(得分:3)

如果 A 主题创建了一个对象:

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

和线程 B 在该对象上调用一个方法:

MyClass.staticMember.run();

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

线程 A 只会继续运行当时正在运行的代码。

答案 1 :(得分:1)

对象没有绑定到它创建的线程...只有你在主线程上调用它们的唯一方法就是在主线程上调用它们。

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

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

在主线程中你打电话:

threadDetect("main");

从您调用的子线程中:

threadDetect("child");

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