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