当一个对象在Java中实例化时,它是否绑定到实例化的线程?因为当我在一个线程中匿名实现一个接口,并将其传递给另一个要运行的线程时,它的所有方法都在原始线程中运行。如果它们绑定到它们的创建线程,那么无论如何都要创建一个将在任何线程中调用它的对象吗?
答案 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是否使用类似的方法来检测哪个线程正在执行该方法,但这是一种方法。